@@ -43,6 +43,84 @@ using namespace clang;
43
43
using namespace CodeGen ;
44
44
using namespace llvm ;
45
45
46
+ static Value *EmitTargetArchBuiltinExpr (CodeGenFunction *CGF,
47
+ unsigned BuiltinID, const CallExpr *E,
48
+ ReturnValueSlot ReturnValue,
49
+ llvm::Triple::ArchType Arch) {
50
+ // When compiling in HipStdPar mode we have to be conservative in rejecting
51
+ // target specific features in the FE, and defer the possible error to the
52
+ // AcceleratorCodeSelection pass, wherein iff an unsupported target builtin is
53
+ // referenced by an accelerator executable function, we emit an error.
54
+ // Returning nullptr here leads to the builtin being handled in
55
+ // EmitStdParUnsupportedBuiltin.
56
+ if (CGF->getLangOpts ().HIPStdPar && CGF->getLangOpts ().CUDAIsDevice &&
57
+ Arch != CGF->getTarget ().getTriple ().getArch ())
58
+ return nullptr ;
59
+
60
+ switch (Arch) {
61
+ case llvm::Triple::arm:
62
+ case llvm::Triple::armeb:
63
+ case llvm::Triple::thumb:
64
+ case llvm::Triple::thumbeb:
65
+ return CGF->EmitARMBuiltinExpr (BuiltinID, E, ReturnValue, Arch);
66
+ case llvm::Triple::aarch64:
67
+ case llvm::Triple::aarch64_32:
68
+ case llvm::Triple::aarch64_be:
69
+ return CGF->EmitAArch64BuiltinExpr (BuiltinID, E, Arch);
70
+ case llvm::Triple::bpfeb:
71
+ case llvm::Triple::bpfel:
72
+ return CGF->EmitBPFBuiltinExpr (BuiltinID, E);
73
+ case llvm::Triple::dxil:
74
+ return CGF->EmitDirectXBuiltinExpr (BuiltinID, E);
75
+ case llvm::Triple::x86:
76
+ case llvm::Triple::x86_64:
77
+ return CGF->EmitX86BuiltinExpr (BuiltinID, E);
78
+ case llvm::Triple::ppc:
79
+ case llvm::Triple::ppcle:
80
+ case llvm::Triple::ppc64:
81
+ case llvm::Triple::ppc64le:
82
+ return CGF->EmitPPCBuiltinExpr (BuiltinID, E);
83
+ case llvm::Triple::r600:
84
+ case llvm::Triple::amdgcn:
85
+ return CGF->EmitAMDGPUBuiltinExpr (BuiltinID, E);
86
+ case llvm::Triple::systemz:
87
+ return CGF->EmitSystemZBuiltinExpr (BuiltinID, E);
88
+ case llvm::Triple::nvptx:
89
+ case llvm::Triple::nvptx64:
90
+ return CGF->EmitNVPTXBuiltinExpr (BuiltinID, E);
91
+ case llvm::Triple::wasm32:
92
+ case llvm::Triple::wasm64:
93
+ return CGF->EmitWebAssemblyBuiltinExpr (BuiltinID, E);
94
+ case llvm::Triple::hexagon:
95
+ return CGF->EmitHexagonBuiltinExpr (BuiltinID, E);
96
+ case llvm::Triple::riscv32:
97
+ case llvm::Triple::riscv64:
98
+ return CGF->EmitRISCVBuiltinExpr (BuiltinID, E, ReturnValue);
99
+ case llvm::Triple::spirv:
100
+ return CGF->EmitSPIRVBuiltinExpr (BuiltinID, E);
101
+ case llvm::Triple::spirv64:
102
+ if (CGF->getTarget ().getTriple ().getOS () != llvm::Triple::OSType::AMDHSA)
103
+ return nullptr ;
104
+ return CGF->EmitAMDGPUBuiltinExpr (BuiltinID, E);
105
+ default :
106
+ return nullptr ;
107
+ }
108
+ }
109
+
110
+ Value *CodeGenFunction::EmitTargetBuiltinExpr (unsigned BuiltinID,
111
+ const CallExpr *E,
112
+ ReturnValueSlot ReturnValue) {
113
+ if (getContext ().BuiltinInfo .isAuxBuiltinID (BuiltinID)) {
114
+ assert (getContext ().getAuxTargetInfo () && " Missing aux target info" );
115
+ return EmitTargetArchBuiltinExpr (
116
+ this , getContext ().BuiltinInfo .getAuxBuiltinID (BuiltinID), E,
117
+ ReturnValue, getContext ().getAuxTargetInfo ()->getTriple ().getArch ());
118
+ }
119
+
120
+ return EmitTargetArchBuiltinExpr (this , BuiltinID, E, ReturnValue,
121
+ getTarget ().getTriple ().getArch ());
122
+ }
123
+
46
124
static void initializeAlloca (CodeGenFunction &CGF, AllocaInst *AI, Value *Size,
47
125
Align AlignmentInBytes) {
48
126
ConstantInt *Byte;
@@ -6214,82 +6292,6 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
6214
6292
return GetUndefRValue (E->getType ());
6215
6293
}
6216
6294
6217
- static Value *EmitTargetArchBuiltinExpr (CodeGenFunction *CGF,
6218
- unsigned BuiltinID, const CallExpr *E,
6219
- ReturnValueSlot ReturnValue,
6220
- llvm::Triple::ArchType Arch) {
6221
- // When compiling in HipStdPar mode we have to be conservative in rejecting
6222
- // target specific features in the FE, and defer the possible error to the
6223
- // AcceleratorCodeSelection pass, wherein iff an unsupported target builtin is
6224
- // referenced by an accelerator executable function, we emit an error.
6225
- // Returning nullptr here leads to the builtin being handled in
6226
- // EmitStdParUnsupportedBuiltin.
6227
- if (CGF->getLangOpts ().HIPStdPar && CGF->getLangOpts ().CUDAIsDevice &&
6228
- Arch != CGF->getTarget ().getTriple ().getArch ())
6229
- return nullptr ;
6230
-
6231
- switch (Arch) {
6232
- case llvm::Triple::arm:
6233
- case llvm::Triple::armeb:
6234
- case llvm::Triple::thumb:
6235
- case llvm::Triple::thumbeb:
6236
- return CGF->EmitARMBuiltinExpr (BuiltinID, E, ReturnValue, Arch);
6237
- case llvm::Triple::aarch64:
6238
- case llvm::Triple::aarch64_32:
6239
- case llvm::Triple::aarch64_be:
6240
- return CGF->EmitAArch64BuiltinExpr (BuiltinID, E, Arch);
6241
- case llvm::Triple::bpfeb:
6242
- case llvm::Triple::bpfel:
6243
- return CGF->EmitBPFBuiltinExpr (BuiltinID, E);
6244
- case llvm::Triple::x86:
6245
- case llvm::Triple::x86_64:
6246
- return CGF->EmitX86BuiltinExpr (BuiltinID, E);
6247
- case llvm::Triple::ppc:
6248
- case llvm::Triple::ppcle:
6249
- case llvm::Triple::ppc64:
6250
- case llvm::Triple::ppc64le:
6251
- return CGF->EmitPPCBuiltinExpr (BuiltinID, E);
6252
- case llvm::Triple::r600:
6253
- case llvm::Triple::amdgcn:
6254
- return CGF->EmitAMDGPUBuiltinExpr (BuiltinID, E);
6255
- case llvm::Triple::systemz:
6256
- return CGF->EmitSystemZBuiltinExpr (BuiltinID, E);
6257
- case llvm::Triple::nvptx:
6258
- case llvm::Triple::nvptx64:
6259
- return CGF->EmitNVPTXBuiltinExpr (BuiltinID, E);
6260
- case llvm::Triple::wasm32:
6261
- case llvm::Triple::wasm64:
6262
- return CGF->EmitWebAssemblyBuiltinExpr (BuiltinID, E);
6263
- case llvm::Triple::hexagon:
6264
- return CGF->EmitHexagonBuiltinExpr (BuiltinID, E);
6265
- case llvm::Triple::riscv32:
6266
- case llvm::Triple::riscv64:
6267
- return CGF->EmitRISCVBuiltinExpr (BuiltinID, E, ReturnValue);
6268
- case llvm::Triple::spirv:
6269
- return CGF->EmitSPIRVBuiltinExpr (BuiltinID, E);
6270
- case llvm::Triple::spirv64:
6271
- if (CGF->getTarget ().getTriple ().getOS () != llvm::Triple::OSType::AMDHSA)
6272
- return nullptr ;
6273
- return CGF->EmitAMDGPUBuiltinExpr (BuiltinID, E);
6274
- default :
6275
- return nullptr ;
6276
- }
6277
- }
6278
-
6279
- Value *CodeGenFunction::EmitTargetBuiltinExpr (unsigned BuiltinID,
6280
- const CallExpr *E,
6281
- ReturnValueSlot ReturnValue) {
6282
- if (getContext ().BuiltinInfo .isAuxBuiltinID (BuiltinID)) {
6283
- assert (getContext ().getAuxTargetInfo () && " Missing aux target info" );
6284
- return EmitTargetArchBuiltinExpr (
6285
- this , getContext ().BuiltinInfo .getAuxBuiltinID (BuiltinID), E,
6286
- ReturnValue, getContext ().getAuxTargetInfo ()->getTriple ().getArch ());
6287
- }
6288
-
6289
- return EmitTargetArchBuiltinExpr (this , BuiltinID, E, ReturnValue,
6290
- getTarget ().getTriple ().getArch ());
6291
- }
6292
-
6293
6295
namespace {
6294
6296
struct BuiltinAlignArgs {
6295
6297
llvm::Value *Src = nullptr ;
@@ -6708,4 +6710,4 @@ RValue CodeGenFunction::EmitIntelSYCLAllocaBuiltin(
6708
6710
// If a slot is provided, store pointer there.
6709
6711
Builder.CreateStore (Allocation, ReturnValue.getValue ());
6710
6712
return RValue::getAggregate (ReturnValue.getValue ());
6711
- }
6713
+ }
0 commit comments