1 //===-- AMDGPU.h - MachineFunction passes hw codegen --------------*- C++ -*-=// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 /// \file 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPU_H 11 #define LLVM_LIB_TARGET_AMDGPU_AMDGPU_H 12 13 #include "llvm/CodeGen/MachinePassManager.h" 14 #include "llvm/IR/PassManager.h" 15 #include "llvm/Pass.h" 16 #include "llvm/Support/AMDGPUAddrSpace.h" 17 #include "llvm/Support/CodeGen.h" 18 19 namespace llvm { 20 21 class AMDGPUTargetMachine; 22 class GCNTargetMachine; 23 class TargetMachine; 24 25 // GlobalISel passes 26 void initializeAMDGPUPreLegalizerCombinerPass(PassRegistry &); 27 FunctionPass *createAMDGPUPreLegalizeCombiner(bool IsOptNone); 28 void initializeAMDGPUPostLegalizerCombinerPass(PassRegistry &); 29 FunctionPass *createAMDGPUPostLegalizeCombiner(bool IsOptNone); 30 FunctionPass *createAMDGPURegBankCombiner(bool IsOptNone); 31 void initializeAMDGPURegBankCombinerPass(PassRegistry &); 32 FunctionPass *createAMDGPUGlobalISelDivergenceLoweringPass(); 33 FunctionPass *createAMDGPURegBankSelectPass(); 34 FunctionPass *createAMDGPURegBankLegalizePass(); 35 36 // SI Passes 37 FunctionPass *createGCNDPPCombinePass(); 38 FunctionPass *createSIAnnotateControlFlowLegacyPass(); 39 FunctionPass *createSIFoldOperandsLegacyPass(); 40 FunctionPass *createSIPeepholeSDWALegacyPass(); 41 FunctionPass *createSILowerI1CopiesLegacyPass(); 42 FunctionPass *createSIShrinkInstructionsLegacyPass(); 43 FunctionPass *createSILoadStoreOptimizerLegacyPass(); 44 FunctionPass *createSIWholeQuadModePass(); 45 FunctionPass *createSIFixControlFlowLiveIntervalsPass(); 46 FunctionPass *createSIOptimizeExecMaskingPreRAPass(); 47 FunctionPass *createSIOptimizeVGPRLiveRangeLegacyPass(); 48 FunctionPass *createSIFixSGPRCopiesLegacyPass(); 49 FunctionPass *createLowerWWMCopiesPass(); 50 FunctionPass *createSIMemoryLegalizerPass(); 51 FunctionPass *createSIInsertWaitcntsPass(); 52 FunctionPass *createSIPreAllocateWWMRegsLegacyPass(); 53 FunctionPass *createSIFormMemoryClausesPass(); 54 55 FunctionPass *createSIPostRABundlerPass(); 56 FunctionPass *createAMDGPUImageIntrinsicOptimizerPass(const TargetMachine *); 57 ModulePass *createAMDGPURemoveIncompatibleFunctionsPass(const TargetMachine *); 58 FunctionPass *createAMDGPUCodeGenPreparePass(); 59 FunctionPass *createAMDGPULateCodeGenPrepareLegacyPass(); 60 FunctionPass *createAMDGPUReserveWWMRegsPass(); 61 FunctionPass *createAMDGPURewriteOutArgumentsPass(); 62 ModulePass * 63 createAMDGPULowerModuleLDSLegacyPass(const AMDGPUTargetMachine *TM = nullptr); 64 ModulePass *createAMDGPULowerBufferFatPointersPass(); 65 FunctionPass *createSIModeRegisterPass(); 66 FunctionPass *createGCNPreRAOptimizationsPass(); 67 FunctionPass *createAMDGPUPreloadKernArgPrologLegacyPass(); 68 69 struct AMDGPUSimplifyLibCallsPass : PassInfoMixin<AMDGPUSimplifyLibCallsPass> { 70 AMDGPUSimplifyLibCallsPass() {} 71 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 72 }; 73 74 struct AMDGPUImageIntrinsicOptimizerPass 75 : PassInfoMixin<AMDGPUImageIntrinsicOptimizerPass> { 76 AMDGPUImageIntrinsicOptimizerPass(TargetMachine &TM) : TM(TM) {} 77 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 78 79 private: 80 TargetMachine &TM; 81 }; 82 83 struct AMDGPUUseNativeCallsPass : PassInfoMixin<AMDGPUUseNativeCallsPass> { 84 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 85 }; 86 87 class SILowerI1CopiesPass : public PassInfoMixin<SILowerI1CopiesPass> { 88 public: 89 SILowerI1CopiesPass() = default; 90 PreservedAnalyses run(MachineFunction &MF, 91 MachineFunctionAnalysisManager &MFAM); 92 }; 93 94 void initializeAMDGPUDAGToDAGISelLegacyPass(PassRegistry &); 95 96 void initializeAMDGPUAlwaysInlinePass(PassRegistry&); 97 98 Pass *createAMDGPUAnnotateKernelFeaturesPass(); 99 Pass *createAMDGPUAttributorLegacyPass(); 100 void initializeAMDGPUAttributorLegacyPass(PassRegistry &); 101 void initializeAMDGPUAnnotateKernelFeaturesPass(PassRegistry &); 102 extern char &AMDGPUAnnotateKernelFeaturesID; 103 104 // DPP/Iterative option enables the atomic optimizer with given strategy 105 // whereas None disables the atomic optimizer. 106 enum class ScanOptions { DPP, Iterative, None }; 107 FunctionPass *createAMDGPUAtomicOptimizerPass(ScanOptions ScanStrategy); 108 void initializeAMDGPUAtomicOptimizerPass(PassRegistry &); 109 extern char &AMDGPUAtomicOptimizerID; 110 111 ModulePass *createAMDGPUCtorDtorLoweringLegacyPass(); 112 void initializeAMDGPUCtorDtorLoweringLegacyPass(PassRegistry &); 113 extern char &AMDGPUCtorDtorLoweringLegacyPassID; 114 115 FunctionPass *createAMDGPULowerKernelArgumentsPass(); 116 void initializeAMDGPULowerKernelArgumentsPass(PassRegistry &); 117 extern char &AMDGPULowerKernelArgumentsID; 118 119 FunctionPass *createAMDGPUPromoteKernelArgumentsPass(); 120 void initializeAMDGPUPromoteKernelArgumentsPass(PassRegistry &); 121 extern char &AMDGPUPromoteKernelArgumentsID; 122 123 struct AMDGPUPromoteKernelArgumentsPass 124 : PassInfoMixin<AMDGPUPromoteKernelArgumentsPass> { 125 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 126 }; 127 128 ModulePass *createAMDGPULowerKernelAttributesPass(); 129 void initializeAMDGPULowerKernelAttributesPass(PassRegistry &); 130 extern char &AMDGPULowerKernelAttributesID; 131 132 struct AMDGPULowerKernelAttributesPass 133 : PassInfoMixin<AMDGPULowerKernelAttributesPass> { 134 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 135 }; 136 137 void initializeAMDGPULowerModuleLDSLegacyPass(PassRegistry &); 138 extern char &AMDGPULowerModuleLDSLegacyPassID; 139 140 struct AMDGPULowerModuleLDSPass : PassInfoMixin<AMDGPULowerModuleLDSPass> { 141 const AMDGPUTargetMachine &TM; 142 AMDGPULowerModuleLDSPass(const AMDGPUTargetMachine &TM_) : TM(TM_) {} 143 144 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 145 }; 146 147 void initializeAMDGPULowerBufferFatPointersPass(PassRegistry &); 148 extern char &AMDGPULowerBufferFatPointersID; 149 150 struct AMDGPULowerBufferFatPointersPass 151 : PassInfoMixin<AMDGPULowerBufferFatPointersPass> { 152 AMDGPULowerBufferFatPointersPass(const TargetMachine &TM) : TM(TM) {} 153 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 154 155 private: 156 const TargetMachine &TM; 157 }; 158 159 void initializeAMDGPUReserveWWMRegsPass(PassRegistry &); 160 extern char &AMDGPUReserveWWMRegsID; 161 162 void initializeAMDGPURewriteOutArgumentsPass(PassRegistry &); 163 extern char &AMDGPURewriteOutArgumentsID; 164 165 void initializeGCNDPPCombineLegacyPass(PassRegistry &); 166 extern char &GCNDPPCombineLegacyID; 167 168 void initializeSIFoldOperandsLegacyPass(PassRegistry &); 169 extern char &SIFoldOperandsLegacyID; 170 171 void initializeSIPeepholeSDWALegacyPass(PassRegistry &); 172 extern char &SIPeepholeSDWALegacyID; 173 174 void initializeSIShrinkInstructionsLegacyPass(PassRegistry &); 175 extern char &SIShrinkInstructionsLegacyID; 176 177 void initializeSIFixSGPRCopiesLegacyPass(PassRegistry &); 178 extern char &SIFixSGPRCopiesLegacyID; 179 180 void initializeSIFixVGPRCopiesLegacyPass(PassRegistry &); 181 extern char &SIFixVGPRCopiesID; 182 183 void initializeSILowerWWMCopiesLegacyPass(PassRegistry &); 184 extern char &SILowerWWMCopiesLegacyID; 185 186 void initializeSILowerI1CopiesLegacyPass(PassRegistry &); 187 extern char &SILowerI1CopiesLegacyID; 188 189 void initializeAMDGPUGlobalISelDivergenceLoweringPass(PassRegistry &); 190 extern char &AMDGPUGlobalISelDivergenceLoweringID; 191 192 void initializeAMDGPURegBankSelectPass(PassRegistry &); 193 extern char &AMDGPURegBankSelectID; 194 195 void initializeAMDGPURegBankLegalizePass(PassRegistry &); 196 extern char &AMDGPURegBankLegalizeID; 197 198 void initializeAMDGPUMarkLastScratchLoadPass(PassRegistry &); 199 extern char &AMDGPUMarkLastScratchLoadID; 200 201 void initializeSILowerSGPRSpillsLegacyPass(PassRegistry &); 202 extern char &SILowerSGPRSpillsLegacyID; 203 204 void initializeSILoadStoreOptimizerLegacyPass(PassRegistry &); 205 extern char &SILoadStoreOptimizerLegacyID; 206 207 void initializeSIWholeQuadModePass(PassRegistry &); 208 extern char &SIWholeQuadModeID; 209 210 void initializeSILowerControlFlowLegacyPass(PassRegistry &); 211 extern char &SILowerControlFlowLegacyID; 212 213 void initializeSIPreEmitPeepholePass(PassRegistry &); 214 extern char &SIPreEmitPeepholeID; 215 216 void initializeSILateBranchLoweringPass(PassRegistry &); 217 extern char &SILateBranchLoweringPassID; 218 219 void initializeSIOptimizeExecMaskingLegacyPass(PassRegistry &); 220 extern char &SIOptimizeExecMaskingLegacyID; 221 222 void initializeSIPreAllocateWWMRegsLegacyPass(PassRegistry &); 223 extern char &SIPreAllocateWWMRegsLegacyID; 224 225 void initializeAMDGPUImageIntrinsicOptimizerPass(PassRegistry &); 226 extern char &AMDGPUImageIntrinsicOptimizerID; 227 228 void initializeAMDGPUPerfHintAnalysisLegacyPass(PassRegistry &); 229 extern char &AMDGPUPerfHintAnalysisLegacyID; 230 231 void initializeGCNRegPressurePrinterPass(PassRegistry &); 232 extern char &GCNRegPressurePrinterID; 233 234 void initializeAMDGPUPreloadKernArgPrologLegacyPass(PassRegistry &); 235 extern char &AMDGPUPreloadKernArgPrologLegacyID; 236 237 // Passes common to R600 and SI 238 FunctionPass *createAMDGPUPromoteAlloca(); 239 void initializeAMDGPUPromoteAllocaPass(PassRegistry&); 240 extern char &AMDGPUPromoteAllocaID; 241 242 FunctionPass *createAMDGPUPromoteAllocaToVector(); 243 void initializeAMDGPUPromoteAllocaToVectorPass(PassRegistry&); 244 extern char &AMDGPUPromoteAllocaToVectorID; 245 246 struct AMDGPUPromoteAllocaPass : PassInfoMixin<AMDGPUPromoteAllocaPass> { 247 AMDGPUPromoteAllocaPass(TargetMachine &TM) : TM(TM) {} 248 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 249 250 private: 251 TargetMachine &TM; 252 }; 253 254 struct AMDGPUPromoteAllocaToVectorPass 255 : PassInfoMixin<AMDGPUPromoteAllocaToVectorPass> { 256 AMDGPUPromoteAllocaToVectorPass(TargetMachine &TM) : TM(TM) {} 257 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 258 259 private: 260 TargetMachine &TM; 261 }; 262 263 struct AMDGPUAtomicOptimizerPass : PassInfoMixin<AMDGPUAtomicOptimizerPass> { 264 AMDGPUAtomicOptimizerPass(TargetMachine &TM, ScanOptions ScanImpl) 265 : TM(TM), ScanImpl(ScanImpl) {} 266 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 267 268 private: 269 TargetMachine &TM; 270 ScanOptions ScanImpl; 271 }; 272 273 Pass *createAMDGPUStructurizeCFGPass(); 274 FunctionPass *createAMDGPUISelDag(TargetMachine &TM, CodeGenOptLevel OptLevel); 275 ModulePass *createAMDGPUAlwaysInlinePass(bool GlobalOpt = true); 276 277 struct AMDGPUAlwaysInlinePass : PassInfoMixin<AMDGPUAlwaysInlinePass> { 278 AMDGPUAlwaysInlinePass(bool GlobalOpt = true) : GlobalOpt(GlobalOpt) {} 279 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 280 281 private: 282 bool GlobalOpt; 283 }; 284 285 void initializeAMDGPUSwLowerLDSLegacyPass(PassRegistry &); 286 extern char &AMDGPUSwLowerLDSLegacyPassID; 287 ModulePass * 288 createAMDGPUSwLowerLDSLegacyPass(const AMDGPUTargetMachine *TM = nullptr); 289 290 struct AMDGPUSwLowerLDSPass : PassInfoMixin<AMDGPUSwLowerLDSPass> { 291 const AMDGPUTargetMachine &TM; 292 AMDGPUSwLowerLDSPass(const AMDGPUTargetMachine &TM_) : TM(TM_) {} 293 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 294 }; 295 296 class AMDGPUCodeGenPreparePass 297 : public PassInfoMixin<AMDGPUCodeGenPreparePass> { 298 private: 299 TargetMachine &TM; 300 301 public: 302 AMDGPUCodeGenPreparePass(TargetMachine &TM) : TM(TM){}; 303 PreservedAnalyses run(Function &, FunctionAnalysisManager &); 304 }; 305 306 class AMDGPULateCodeGenPreparePass 307 : public PassInfoMixin<AMDGPULateCodeGenPreparePass> { 308 private: 309 const GCNTargetMachine &TM; 310 311 public: 312 AMDGPULateCodeGenPreparePass(const GCNTargetMachine &TM) : TM(TM) {}; 313 PreservedAnalyses run(Function &, FunctionAnalysisManager &); 314 }; 315 316 class AMDGPULowerKernelArgumentsPass 317 : public PassInfoMixin<AMDGPULowerKernelArgumentsPass> { 318 private: 319 TargetMachine &TM; 320 321 public: 322 AMDGPULowerKernelArgumentsPass(TargetMachine &TM) : TM(TM){}; 323 PreservedAnalyses run(Function &, FunctionAnalysisManager &); 324 }; 325 326 struct AMDGPUAttributorOptions { 327 bool IsClosedWorld = false; 328 }; 329 330 class AMDGPUAttributorPass : public PassInfoMixin<AMDGPUAttributorPass> { 331 private: 332 TargetMachine &TM; 333 334 AMDGPUAttributorOptions Options; 335 336 public: 337 AMDGPUAttributorPass(TargetMachine &TM, AMDGPUAttributorOptions Options = {}) 338 : TM(TM), Options(Options) {}; 339 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 340 }; 341 342 class AMDGPUAnnotateUniformValuesPass 343 : public PassInfoMixin<AMDGPUAnnotateUniformValuesPass> { 344 public: 345 AMDGPUAnnotateUniformValuesPass() {} 346 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 347 }; 348 349 FunctionPass *createAMDGPUAnnotateUniformValuesLegacy(); 350 351 ModulePass *createAMDGPUPrintfRuntimeBinding(); 352 void initializeAMDGPUPrintfRuntimeBindingPass(PassRegistry&); 353 extern char &AMDGPUPrintfRuntimeBindingID; 354 355 void initializeAMDGPUResourceUsageAnalysisPass(PassRegistry &); 356 extern char &AMDGPUResourceUsageAnalysisID; 357 358 struct AMDGPUPrintfRuntimeBindingPass 359 : PassInfoMixin<AMDGPUPrintfRuntimeBindingPass> { 360 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 361 }; 362 363 ModulePass* createAMDGPUUnifyMetadataPass(); 364 void initializeAMDGPUUnifyMetadataPass(PassRegistry&); 365 extern char &AMDGPUUnifyMetadataID; 366 367 struct AMDGPUUnifyMetadataPass : PassInfoMixin<AMDGPUUnifyMetadataPass> { 368 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 369 }; 370 371 void initializeSIOptimizeExecMaskingPreRAPass(PassRegistry&); 372 extern char &SIOptimizeExecMaskingPreRAID; 373 374 void initializeSIOptimizeVGPRLiveRangeLegacyPass(PassRegistry &); 375 extern char &SIOptimizeVGPRLiveRangeLegacyID; 376 377 void initializeAMDGPUAnnotateUniformValuesLegacyPass(PassRegistry &); 378 extern char &AMDGPUAnnotateUniformValuesLegacyPassID; 379 380 void initializeAMDGPUCodeGenPreparePass(PassRegistry&); 381 extern char &AMDGPUCodeGenPrepareID; 382 383 void initializeAMDGPURemoveIncompatibleFunctionsLegacyPass(PassRegistry &); 384 extern char &AMDGPURemoveIncompatibleFunctionsID; 385 386 void initializeAMDGPULateCodeGenPrepareLegacyPass(PassRegistry &); 387 extern char &AMDGPULateCodeGenPrepareLegacyID; 388 389 FunctionPass *createAMDGPURewriteUndefForPHILegacyPass(); 390 void initializeAMDGPURewriteUndefForPHILegacyPass(PassRegistry &); 391 extern char &AMDGPURewriteUndefForPHILegacyPassID; 392 393 class AMDGPURewriteUndefForPHIPass 394 : public PassInfoMixin<AMDGPURewriteUndefForPHIPass> { 395 public: 396 AMDGPURewriteUndefForPHIPass() = default; 397 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 398 }; 399 400 class SIAnnotateControlFlowPass 401 : public PassInfoMixin<SIAnnotateControlFlowPass> { 402 private: 403 const AMDGPUTargetMachine &TM; 404 405 public: 406 SIAnnotateControlFlowPass(const AMDGPUTargetMachine &TM) : TM(TM) {} 407 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 408 }; 409 410 void initializeSIAnnotateControlFlowLegacyPass(PassRegistry &); 411 extern char &SIAnnotateControlFlowLegacyPassID; 412 413 void initializeSIMemoryLegalizerPass(PassRegistry&); 414 extern char &SIMemoryLegalizerID; 415 416 void initializeSIModeRegisterPass(PassRegistry&); 417 extern char &SIModeRegisterID; 418 419 void initializeAMDGPUInsertDelayAluPass(PassRegistry &); 420 extern char &AMDGPUInsertDelayAluID; 421 422 void initializeSIInsertHardClausesPass(PassRegistry &); 423 extern char &SIInsertHardClausesID; 424 425 void initializeSIInsertWaitcntsPass(PassRegistry&); 426 extern char &SIInsertWaitcntsID; 427 428 void initializeSIFormMemoryClausesPass(PassRegistry&); 429 extern char &SIFormMemoryClausesID; 430 431 void initializeSIPostRABundlerPass(PassRegistry&); 432 extern char &SIPostRABundlerID; 433 434 void initializeGCNCreateVOPDPass(PassRegistry &); 435 extern char &GCNCreateVOPDID; 436 437 void initializeAMDGPUUnifyDivergentExitNodesPass(PassRegistry&); 438 extern char &AMDGPUUnifyDivergentExitNodesID; 439 440 ImmutablePass *createAMDGPUAAWrapperPass(); 441 void initializeAMDGPUAAWrapperPassPass(PassRegistry&); 442 ImmutablePass *createAMDGPUExternalAAWrapperPass(); 443 void initializeAMDGPUExternalAAWrapperPass(PassRegistry&); 444 445 void initializeAMDGPUArgumentUsageInfoPass(PassRegistry &); 446 447 ModulePass *createAMDGPUOpenCLEnqueuedBlockLoweringLegacyPass(); 448 void initializeAMDGPUOpenCLEnqueuedBlockLoweringLegacyPass(PassRegistry &); 449 extern char &AMDGPUOpenCLEnqueuedBlockLoweringLegacyID; 450 451 void initializeGCNNSAReassignPass(PassRegistry &); 452 extern char &GCNNSAReassignID; 453 454 void initializeGCNPreRALongBranchRegPass(PassRegistry &); 455 extern char &GCNPreRALongBranchRegID; 456 457 void initializeGCNPreRAOptimizationsPass(PassRegistry &); 458 extern char &GCNPreRAOptimizationsID; 459 460 FunctionPass *createAMDGPUSetWavePriorityPass(); 461 void initializeAMDGPUSetWavePriorityPass(PassRegistry &); 462 463 void initializeGCNRewritePartialRegUsesPass(llvm::PassRegistry &); 464 extern char &GCNRewritePartialRegUsesID; 465 466 namespace AMDGPU { 467 enum TargetIndex { 468 TI_CONSTDATA_START, 469 TI_SCRATCH_RSRC_DWORD0, 470 TI_SCRATCH_RSRC_DWORD1, 471 TI_SCRATCH_RSRC_DWORD2, 472 TI_SCRATCH_RSRC_DWORD3 473 }; 474 475 static inline bool addrspacesMayAlias(unsigned AS1, unsigned AS2) { 476 static_assert(AMDGPUAS::MAX_AMDGPU_ADDRESS <= 9, "Addr space out of range"); 477 478 if (AS1 > AMDGPUAS::MAX_AMDGPU_ADDRESS || AS2 > AMDGPUAS::MAX_AMDGPU_ADDRESS) 479 return true; 480 481 // This array is indexed by address space value enum elements 0 ... to 9 482 // clang-format off 483 static const bool ASAliasRules[10][10] = { 484 /* Flat Global Region Group Constant Private Const32 BufFatPtr BufRsrc BufStrdPtr */ 485 /* Flat */ {true, true, false, true, true, true, true, true, true, true}, 486 /* Global */ {true, true, false, false, true, false, true, true, true, true}, 487 /* Region */ {false, false, true, false, false, false, false, false, false, false}, 488 /* Group */ {true, false, false, true, false, false, false, false, false, false}, 489 /* Constant */ {true, true, false, false, false, false, true, true, true, true}, 490 /* Private */ {true, false, false, false, false, true, false, false, false, false}, 491 /* Constant 32-bit */ {true, true, false, false, true, false, false, true, true, true}, 492 /* Buffer Fat Ptr */ {true, true, false, false, true, false, true, true, true, true}, 493 /* Buffer Resource */ {true, true, false, false, true, false, true, true, true, true}, 494 /* Buffer Strided Ptr */ {true, true, false, false, true, false, true, true, true, true}, 495 }; 496 // clang-format on 497 498 return ASAliasRules[AS1][AS2]; 499 } 500 501 } 502 503 } // End namespace llvm 504 505 #endif 506