14e0f464cSJohannes Doerfert; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals 24e0f464cSJohannes Doerfert; RUN: opt -aa-pipeline=basic-aa -passes=openmp-opt -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT 34e0f464cSJohannes Doerfert; RUN: opt -aa-pipeline=basic-aa -passes=openmp-opt-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC 44e0f464cSJohannes Doerfert 54e0f464cSJohannes Doerferttarget triple = "amdgcn-amd-amdhsa" 64e0f464cSJohannes Doerfert 73de645efSJohannes Doerfert%struct.ConfigurationEnvironmentTy = type { i8, i8, i8, i32, i32, i32, i32, i32, i32 } 810068cd6SShilei Tian%struct.KernelEnvironmentTy = type { %struct.ConfigurationEnvironmentTy, ptr, ptr } 94e0f464cSJohannes Doerfert 104e0f464cSJohannes Doerfert@G = internal addrspace(3) global i32 undef, align 4 115238df7eSJohannes Doerfert@H = internal addrspace(3) global i32 undef, align 4 12578d5073SJohannes Doerfert@X = internal addrspace(3) global i32 undef, align 4 133a3ea430SJohannes Doerfert@QA1 = internal addrspace(3) global i32 undef, align 4 143a3ea430SJohannes Doerfert@QB1 = internal addrspace(3) global i32 undef, align 4 153a3ea430SJohannes Doerfert@QC1 = internal addrspace(3) global i32 undef, align 4 163a3ea430SJohannes Doerfert@QD1 = internal addrspace(3) global i32 undef, align 4 173a3ea430SJohannes Doerfert@QA2 = internal addrspace(3) global i32 undef, align 4 183a3ea430SJohannes Doerfert@QB2 = internal addrspace(3) global i32 undef, align 4 193a3ea430SJohannes Doerfert@QC2 = internal addrspace(3) global i32 undef, align 4 203a3ea430SJohannes Doerfert@QD2 = internal addrspace(3) global i32 undef, align 4 213a3ea430SJohannes Doerfert@QA3 = internal addrspace(3) global i32 undef, align 4 223a3ea430SJohannes Doerfert@QB3 = internal addrspace(3) global i32 undef, align 4 233a3ea430SJohannes Doerfert@QC3 = internal addrspace(3) global i32 undef, align 4 243a3ea430SJohannes Doerfert@QD3 = internal addrspace(3) global i32 undef, align 4 254009f84dSJohannes Doerfert@UAA1 = internal addrspace(3) global i32 undef, align 4 264009f84dSJohannes Doerfert@UAA2 = internal addrspace(3) global i32 undef, align 4 270cd8a289SJohannes Doerfert@UAA3 = internal addrspace(3) global i32 undef, align 4 280cd8a289SJohannes Doerfert@UANA1 = internal addrspace(3) global i32 undef, align 4 297bc88cbeSJohannes Doerfert@str = private unnamed_addr addrspace(4) constant [1 x i8] c"\00", align 1 303de645efSJohannes Doerfert@kernel_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 0, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0 }, ptr null, ptr null } 314e0f464cSJohannes Doerfert 324e0f464cSJohannes Doerfert; Make sure we do not delete the stores to @G without also replacing the load with `1`. 334e0f464cSJohannes Doerfert;. 34cd3a4c31SJohannes Doerfert; CHECK: @G = internal addrspace(3) global i32 undef, align 4 35cd3a4c31SJohannes Doerfert; CHECK: @H = internal addrspace(3) global i32 undef, align 4 36cd3a4c31SJohannes Doerfert; CHECK: @X = internal addrspace(3) global i32 undef, align 4 37cd3a4c31SJohannes Doerfert; CHECK: @QA1 = internal addrspace(3) global i32 undef, align 4 38cd3a4c31SJohannes Doerfert; CHECK: @QB1 = internal addrspace(3) global i32 undef, align 4 39cd3a4c31SJohannes Doerfert; CHECK: @QC1 = internal addrspace(3) global i32 undef, align 4 40cd3a4c31SJohannes Doerfert; CHECK: @QD1 = internal addrspace(3) global i32 undef, align 4 41cd3a4c31SJohannes Doerfert; CHECK: @QA2 = internal addrspace(3) global i32 undef, align 4 42cd3a4c31SJohannes Doerfert; CHECK: @QB2 = internal addrspace(3) global i32 undef, align 4 43cd3a4c31SJohannes Doerfert; CHECK: @QC2 = internal addrspace(3) global i32 undef, align 4 44cd3a4c31SJohannes Doerfert; CHECK: @QD2 = internal addrspace(3) global i32 undef, align 4 45cd3a4c31SJohannes Doerfert; CHECK: @QA3 = internal addrspace(3) global i32 undef, align 4 46cd3a4c31SJohannes Doerfert; CHECK: @QB3 = internal addrspace(3) global i32 undef, align 4 47cd3a4c31SJohannes Doerfert; CHECK: @QC3 = internal addrspace(3) global i32 undef, align 4 48cd3a4c31SJohannes Doerfert; CHECK: @QD3 = internal addrspace(3) global i32 undef, align 4 49cd3a4c31SJohannes Doerfert; CHECK: @UAA1 = internal addrspace(3) global i32 undef, align 4 50cd3a4c31SJohannes Doerfert; CHECK: @UAA2 = internal addrspace(3) global i32 undef, align 4 51cd3a4c31SJohannes Doerfert; CHECK: @UAA3 = internal addrspace(3) global i32 undef, align 4 52cd3a4c31SJohannes Doerfert; CHECK: @UANA1 = internal addrspace(3) global i32 undef, align 4 53cd3a4c31SJohannes Doerfert; CHECK: @str = private unnamed_addr addrspace(4) constant [1 x i8] zeroinitializer, align 1 54cd3a4c31SJohannes Doerfert; CHECK: @kernel_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 0, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0 }, ptr null, ptr null } 554e0f464cSJohannes Doerfert;. 56*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel(ptr %dyn) "kernel" { 574e0f464cSJohannes Doerfert; 5877dbd1d7SJohannes Doerfert; TUNIT: Function Attrs: norecurse 5977dbd1d7SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel 60b8cbc5c0SJohannes Doerfert; TUNIT-SAME: (ptr [[DYN:%.*]]) #[[ATTR0:[0-9]+]] { 61b8cbc5c0SJohannes Doerfert; TUNIT-NEXT: [[CALL:%.*]] = call i32 @__kmpc_target_init(ptr @kernel_kernel_environment, ptr [[DYN]]) 6277dbd1d7SJohannes Doerfert; TUNIT-NEXT: [[CMP:%.*]] = icmp eq i32 [[CALL]], -1 6377dbd1d7SJohannes Doerfert; TUNIT-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]] 6477dbd1d7SJohannes Doerfert; TUNIT: if.then: 6577dbd1d7SJohannes Doerfert; TUNIT-NEXT: br label [[IF_MERGE:%.*]] 6677dbd1d7SJohannes Doerfert; TUNIT: if.else: 6777dbd1d7SJohannes Doerfert; TUNIT-NEXT: call void @barrier() #[[ATTR6:[0-9]+]] 687e77e812SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 1) #[[ATTR7:[0-9]+]] 697e77e812SJohannes Doerfert; TUNIT-NEXT: call void @llvm.assume(i1 true) 7077dbd1d7SJohannes Doerfert; TUNIT-NEXT: call void @barrier() #[[ATTR6]] 7177dbd1d7SJohannes Doerfert; TUNIT-NEXT: br label [[IF_MERGE]] 7277dbd1d7SJohannes Doerfert; TUNIT: if.merge: 7377dbd1d7SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]] 7477dbd1d7SJohannes Doerfert; TUNIT-NEXT: br i1 [[CMP]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]] 7577dbd1d7SJohannes Doerfert; TUNIT: if.then2: 7677dbd1d7SJohannes Doerfert; TUNIT-NEXT: call void @barrier() #[[ATTR6]] 7777dbd1d7SJohannes Doerfert; TUNIT-NEXT: br label [[IF_END]] 7877dbd1d7SJohannes Doerfert; TUNIT: if.end: 7910068cd6SShilei Tian; TUNIT-NEXT: call void @__kmpc_target_deinit() 8077dbd1d7SJohannes Doerfert; TUNIT-NEXT: ret void 8177dbd1d7SJohannes Doerfert; 8277dbd1d7SJohannes Doerfert; CGSCC: Function Attrs: norecurse 8377dbd1d7SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel 84b8cbc5c0SJohannes Doerfert; CGSCC-SAME: (ptr [[DYN:%.*]]) #[[ATTR0:[0-9]+]] { 85b8cbc5c0SJohannes Doerfert; CGSCC-NEXT: [[CALL:%.*]] = call i32 @__kmpc_target_init(ptr @kernel_kernel_environment, ptr [[DYN]]) 8677dbd1d7SJohannes Doerfert; CGSCC-NEXT: [[CMP:%.*]] = icmp eq i32 [[CALL]], -1 8777dbd1d7SJohannes Doerfert; CGSCC-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]] 8877dbd1d7SJohannes Doerfert; CGSCC: if.then: 8977dbd1d7SJohannes Doerfert; CGSCC-NEXT: br label [[IF_MERGE:%.*]] 9077dbd1d7SJohannes Doerfert; CGSCC: if.else: 9177dbd1d7SJohannes Doerfert; CGSCC-NEXT: call void @barrier() #[[ATTR6:[0-9]+]] 927e77e812SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 1) #[[ATTR6]] 937e77e812SJohannes Doerfert; CGSCC-NEXT: call void @llvm.assume(i1 true) 9477dbd1d7SJohannes Doerfert; CGSCC-NEXT: call void @barrier() #[[ATTR6]] 9577dbd1d7SJohannes Doerfert; CGSCC-NEXT: br label [[IF_MERGE]] 9677dbd1d7SJohannes Doerfert; CGSCC: if.merge: 9777dbd1d7SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]] 9877dbd1d7SJohannes Doerfert; CGSCC-NEXT: br i1 [[CMP]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]] 9977dbd1d7SJohannes Doerfert; CGSCC: if.then2: 10077dbd1d7SJohannes Doerfert; CGSCC-NEXT: call void @barrier() #[[ATTR6]] 10177dbd1d7SJohannes Doerfert; CGSCC-NEXT: br label [[IF_END]] 10277dbd1d7SJohannes Doerfert; CGSCC: if.end: 10310068cd6SShilei Tian; CGSCC-NEXT: call void @__kmpc_target_deinit() 10477dbd1d7SJohannes Doerfert; CGSCC-NEXT: ret void 1054e0f464cSJohannes Doerfert; 106b8cbc5c0SJohannes Doerfert %call = call i32 @__kmpc_target_init(ptr @kernel_kernel_environment, ptr %dyn) 1074e0f464cSJohannes Doerfert %cmp = icmp eq i32 %call, -1 1084e0f464cSJohannes Doerfert br i1 %cmp, label %if.then, label %if.else 1094e0f464cSJohannes Doerfertif.then: 110aa8e9facSNikita Popov store i32 1, ptr addrspace(3) @G 1115238df7eSJohannes Doerfert store i32 2, ptr addrspace(3) @H 1124e0f464cSJohannes Doerfert br label %if.merge 1134e0f464cSJohannes Doerfertif.else: 1144e0f464cSJohannes Doerfert call void @barrier(); 115aa8e9facSNikita Popov %l = load i32, ptr addrspace(3) @G 1164e0f464cSJohannes Doerfert call void @use1(i32 %l) 1175238df7eSJohannes Doerfert %hv = load i32, ptr addrspace(3) @H 1185238df7eSJohannes Doerfert %hc = icmp eq i32 %hv, 2 1195238df7eSJohannes Doerfert call void @llvm.assume(i1 %hc) 1205238df7eSJohannes Doerfert call void @barrier(); 1214e0f464cSJohannes Doerfert br label %if.merge 1224e0f464cSJohannes Doerfertif.merge: 1235238df7eSJohannes Doerfert %hreload = load i32, ptr addrspace(3) @H 1245238df7eSJohannes Doerfert call void @use1(i32 %hreload) 1254e0f464cSJohannes Doerfert br i1 %cmp, label %if.then2, label %if.end 1264e0f464cSJohannes Doerfertif.then2: 127aa8e9facSNikita Popov store i32 2, ptr addrspace(3) @G 1284e0f464cSJohannes Doerfert call void @barrier(); 1294e0f464cSJohannes Doerfert br label %if.end 1304e0f464cSJohannes Doerfertif.end: 13110068cd6SShilei Tian call void @__kmpc_target_deinit() 1324e0f464cSJohannes Doerfert ret void 1334e0f464cSJohannes Doerfert} 1344e0f464cSJohannes Doerfert 1357bc88cbeSJohannes Doerfertdefine void @test_assume() { 1367bc88cbeSJohannes Doerfert; CHECK-LABEL: define {{[^@]+}}@test_assume() { 137deab451eSNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp ne ptr addrspacecast (ptr addrspace(4) @str to ptr), null 138deab451eSNikita Popov; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]]) 1397bc88cbeSJohannes Doerfert; CHECK-NEXT: ret void 1407bc88cbeSJohannes Doerfert; 141deab451eSNikita Popov %cmp = icmp ne ptr addrspacecast (ptr addrspace(4) @str to ptr), null 142deab451eSNikita Popov call void @llvm.assume(i1 %cmp) 1437bc88cbeSJohannes Doerfert ret void 1447bc88cbeSJohannes Doerfert} 1457bc88cbeSJohannes Doerfert 146578d5073SJohannes Doerfert; We can't ignore the sync, hence this might store 2 into %p 147*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel2(ptr %p) "kernel" { 148578d5073SJohannes Doerfert; CHECK-LABEL: define {{[^@]+}}@kernel2 149578d5073SJohannes Doerfert; CHECK-SAME: (ptr [[P:%.*]]) #[[ATTR1:[0-9]+]] { 150578d5073SJohannes Doerfert; CHECK-NEXT: store i32 1, ptr addrspace(3) @X, align 4 151578d5073SJohannes Doerfert; CHECK-NEXT: call void @sync() 152578d5073SJohannes Doerfert; CHECK-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @X, align 4 153578d5073SJohannes Doerfert; CHECK-NEXT: store i32 2, ptr addrspace(3) @X, align 4 154578d5073SJohannes Doerfert; CHECK-NEXT: store i32 [[V]], ptr [[P]], align 4 155578d5073SJohannes Doerfert; CHECK-NEXT: ret void 156578d5073SJohannes Doerfert; 157578d5073SJohannes Doerfert store i32 1, ptr addrspace(3) @X 158578d5073SJohannes Doerfert call void @sync() 159578d5073SJohannes Doerfert %v = load i32, ptr addrspace(3) @X 160578d5073SJohannes Doerfert store i32 2, ptr addrspace(3) @X 161578d5073SJohannes Doerfert store i32 %v, ptr %p 162578d5073SJohannes Doerfert ret void 163578d5073SJohannes Doerfert} 164578d5073SJohannes Doerfert 165578d5073SJohannes Doerfert; We can't ignore the sync, hence this might store 2 into %p 166*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel3(ptr %p) "kernel" { 167578d5073SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel3 168578d5073SJohannes Doerfert; TUNIT-SAME: (ptr [[P:%.*]]) #[[ATTR1]] { 169578d5073SJohannes Doerfert; TUNIT-NEXT: store i32 1, ptr addrspace(3) @X, align 4 170578d5073SJohannes Doerfert; TUNIT-NEXT: call void @sync_def.internalized() 171578d5073SJohannes Doerfert; TUNIT-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @X, align 4 172578d5073SJohannes Doerfert; TUNIT-NEXT: store i32 2, ptr addrspace(3) @X, align 4 173578d5073SJohannes Doerfert; TUNIT-NEXT: store i32 [[V]], ptr [[P]], align 4 174578d5073SJohannes Doerfert; TUNIT-NEXT: ret void 175578d5073SJohannes Doerfert; 176578d5073SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel3 177578d5073SJohannes Doerfert; CGSCC-SAME: (ptr [[P:%.*]]) #[[ATTR1]] { 178578d5073SJohannes Doerfert; CGSCC-NEXT: store i32 1, ptr addrspace(3) @X, align 4 179578d5073SJohannes Doerfert; CGSCC-NEXT: call void @sync_def() 180578d5073SJohannes Doerfert; CGSCC-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @X, align 4 181578d5073SJohannes Doerfert; CGSCC-NEXT: store i32 2, ptr addrspace(3) @X, align 4 182578d5073SJohannes Doerfert; CGSCC-NEXT: store i32 [[V]], ptr [[P]], align 4 183578d5073SJohannes Doerfert; CGSCC-NEXT: ret void 184578d5073SJohannes Doerfert; 185578d5073SJohannes Doerfert store i32 1, ptr addrspace(3) @X 186578d5073SJohannes Doerfert call void @sync_def() 187578d5073SJohannes Doerfert %v = load i32, ptr addrspace(3) @X 188578d5073SJohannes Doerfert store i32 2, ptr addrspace(3) @X 189578d5073SJohannes Doerfert store i32 %v, ptr %p 190578d5073SJohannes Doerfert ret void 191578d5073SJohannes Doerfert} 192578d5073SJohannes Doerfert 193578d5073SJohannes Doerfertdefine void @sync_def() { 194578d5073SJohannes Doerfert; CHECK-LABEL: define {{[^@]+}}@sync_def() { 195578d5073SJohannes Doerfert; CHECK-NEXT: call void @sync() 196578d5073SJohannes Doerfert; CHECK-NEXT: ret void 197578d5073SJohannes Doerfert; 198578d5073SJohannes Doerfert call void @sync() 199578d5073SJohannes Doerfert ret void 200578d5073SJohannes Doerfert} 201578d5073SJohannes Doerfert 202*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4a1(i1 %c) "kernel" { 2033a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4a1 2043a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 2053a3ea430SJohannes Doerfert; TUNIT-NEXT: store i32 0, ptr addrspace(3) @QA1, align 4 2063a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 2073a3ea430SJohannes Doerfert; TUNIT: L: 2083a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 2093a3ea430SJohannes Doerfert; TUNIT-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QA1, align 4 2103a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 [[V]]) #[[ATTR7]] 2113a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 2123a3ea430SJohannes Doerfert; TUNIT: S: 2133a3ea430SJohannes Doerfert; TUNIT-NEXT: store i32 2, ptr addrspace(3) @QA1, align 4 2143a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 2153a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 2163a3ea430SJohannes Doerfert; 2173a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4a1 2183a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 2193a3ea430SJohannes Doerfert; CGSCC-NEXT: store i32 0, ptr addrspace(3) @QA1, align 4 2203a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 2213a3ea430SJohannes Doerfert; CGSCC: L: 2223a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 2233a3ea430SJohannes Doerfert; CGSCC-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QA1, align 4 2243a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 [[V]]) #[[ATTR6]] 2253a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 2263a3ea430SJohannes Doerfert; CGSCC: S: 2273a3ea430SJohannes Doerfert; CGSCC-NEXT: store i32 2, ptr addrspace(3) @QA1, align 4 2283a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 2293a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 2303a3ea430SJohannes Doerfert; 2313a3ea430SJohannes Doerfert store i32 0, ptr addrspace(3) @QA1 2323a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 2333a3ea430SJohannes DoerfertL: 2343a3ea430SJohannes Doerfert call void @sync(); 2353a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QA1 2363a3ea430SJohannes Doerfert call void @use1(i32 %v) 2373a3ea430SJohannes Doerfert ret void 2383a3ea430SJohannes DoerfertS: 2393a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QA1 2403a3ea430SJohannes Doerfert call void @sync(); 2413a3ea430SJohannes Doerfert ret void 2423a3ea430SJohannes Doerfert} 2433a3ea430SJohannes Doerfert 24424656e99SJohannes Doerfert; We should not replace the load or delete the second store. 245*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4b1(i1 %c) "kernel" { 2463a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4b1 2473a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 24824656e99SJohannes Doerfert; TUNIT-NEXT: store i32 0, ptr addrspace(3) @QB1, align 4 2493a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 2503a3ea430SJohannes Doerfert; TUNIT: L: 2513a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 25224656e99SJohannes Doerfert; TUNIT-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QB1, align 4 25324656e99SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 [[V]]) #[[ATTR7]] 2543a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 2553a3ea430SJohannes Doerfert; TUNIT: S: 25624656e99SJohannes Doerfert; TUNIT-NEXT: store i32 2, ptr addrspace(3) @QB1, align 4 2573a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 2583a3ea430SJohannes Doerfert; 2593a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4b1 2603a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 26124656e99SJohannes Doerfert; CGSCC-NEXT: store i32 0, ptr addrspace(3) @QB1, align 4 2623a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 2633a3ea430SJohannes Doerfert; CGSCC: L: 2643a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 26524656e99SJohannes Doerfert; CGSCC-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QB1, align 4 26624656e99SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 [[V]]) #[[ATTR6]] 2673a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 2683a3ea430SJohannes Doerfert; CGSCC: S: 26924656e99SJohannes Doerfert; CGSCC-NEXT: store i32 2, ptr addrspace(3) @QB1, align 4 2703a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 2713a3ea430SJohannes Doerfert; 2723a3ea430SJohannes Doerfert store i32 0, ptr addrspace(3) @QB1 2733a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 2743a3ea430SJohannes DoerfertL: 2753a3ea430SJohannes Doerfert call void @sync(); 2763a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QB1 2773a3ea430SJohannes Doerfert call void @use1(i32 %v) 2783a3ea430SJohannes Doerfert ret void 2793a3ea430SJohannes DoerfertS: 2803a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QB1 2813a3ea430SJohannes Doerfert ret void 2823a3ea430SJohannes Doerfert} 2833a3ea430SJohannes Doerfert 284*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4a2(i1 %c) "kernel" { 2853a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4a2 2863a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 2873a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 2883a3ea430SJohannes Doerfert; TUNIT: L: 2893a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 2903a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]] 2913a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 2923a3ea430SJohannes Doerfert; TUNIT: S: 2933a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 2943a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 2953a3ea430SJohannes Doerfert; 2963a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4a2 2973a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 2983a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 2993a3ea430SJohannes Doerfert; CGSCC: L: 3003a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 3013a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]] 3023a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 3033a3ea430SJohannes Doerfert; CGSCC: S: 3043a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 3053a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 3063a3ea430SJohannes Doerfert; 3073a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 3083a3ea430SJohannes DoerfertL: 3093a3ea430SJohannes Doerfert call void @sync(); 3103a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QA2 3113a3ea430SJohannes Doerfert call void @use1(i32 %v) 3123a3ea430SJohannes Doerfert ret void 3133a3ea430SJohannes DoerfertS: 3143a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QA2 3153a3ea430SJohannes Doerfert call void @sync(); 3163a3ea430SJohannes Doerfert ret void 3173a3ea430SJohannes Doerfert} 3183a3ea430SJohannes Doerfert 3193a3ea430SJohannes Doerfert; FIXME: We should not replace the load with undef. 320*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4b2(i1 %c) "kernel" { 3213a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4b2 3223a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 3233a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 3243a3ea430SJohannes Doerfert; TUNIT: L: 3253a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 32624656e99SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]] 3273a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 3283a3ea430SJohannes Doerfert; TUNIT: S: 3293a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 3303a3ea430SJohannes Doerfert; 3313a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4b2 3323a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 3333a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 3343a3ea430SJohannes Doerfert; CGSCC: L: 3353a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 33624656e99SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]] 3373a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 3383a3ea430SJohannes Doerfert; CGSCC: S: 3393a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 3403a3ea430SJohannes Doerfert; 3413a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 3423a3ea430SJohannes DoerfertL: 3433a3ea430SJohannes Doerfert call void @sync(); 3443a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QB2 3453a3ea430SJohannes Doerfert call void @use1(i32 %v) 3463a3ea430SJohannes Doerfert ret void 3473a3ea430SJohannes DoerfertS: 3483a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QB2 3493a3ea430SJohannes Doerfert ret void 3503a3ea430SJohannes Doerfert} 3513a3ea430SJohannes Doerfert 352*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4a3(i1 %c) "kernel" { 3533a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4a3 3543a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 3553a3ea430SJohannes Doerfert; TUNIT-NEXT: store i32 0, ptr addrspace(3) @QA3, align 4 3563a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 3573a3ea430SJohannes Doerfert; TUNIT: L: 3583a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 3593a3ea430SJohannes Doerfert; TUNIT-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QA3, align 4 3603a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 [[V]]) #[[ATTR7]] 3613a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 3623a3ea430SJohannes Doerfert; TUNIT: S: 3633a3ea430SJohannes Doerfert; TUNIT-NEXT: store i32 2, ptr addrspace(3) @QA3, align 4 3643a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 3653a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 3663a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 3673a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 3683a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 3693a3ea430SJohannes Doerfert; 3703a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4a3 3713a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 3723a3ea430SJohannes Doerfert; CGSCC-NEXT: store i32 0, ptr addrspace(3) @QA3, align 4 3733a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 3743a3ea430SJohannes Doerfert; CGSCC: L: 3753a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 3763a3ea430SJohannes Doerfert; CGSCC-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QA3, align 4 3773a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 [[V]]) #[[ATTR6]] 3783a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 3793a3ea430SJohannes Doerfert; CGSCC: S: 3803a3ea430SJohannes Doerfert; CGSCC-NEXT: store i32 2, ptr addrspace(3) @QA3, align 4 3813a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 3823a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 3833a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 3843a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 3853a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 3863a3ea430SJohannes Doerfert; 3873a3ea430SJohannes Doerfert store i32 0, ptr addrspace(3) @QA3 3883a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 3893a3ea430SJohannes DoerfertL: 3903a3ea430SJohannes Doerfert call void @sync(); 3913a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QA3 3923a3ea430SJohannes Doerfert call void @use1(i32 %v) 3933a3ea430SJohannes Doerfert ret void 3943a3ea430SJohannes DoerfertS: 3953a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QA3 3963a3ea430SJohannes Doerfert call void @sync(); 3973a3ea430SJohannes Doerfert call void @sync(); 3983a3ea430SJohannes Doerfert call void @sync(); 3993a3ea430SJohannes Doerfert call void @sync(); 4003a3ea430SJohannes Doerfert ret void 4013a3ea430SJohannes Doerfert} 4023a3ea430SJohannes Doerfert 403fe12d313SJohannes Doerfert; The load of QB3 should not be simplified to 0. 404*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4b3(i1 %c) "kernel" { 4053a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4b3 4063a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 407fe12d313SJohannes Doerfert; TUNIT-NEXT: store i32 0, ptr addrspace(3) @QB3, align 4 4083a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 4093a3ea430SJohannes Doerfert; TUNIT: L: 4103a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @sync() 411fe12d313SJohannes Doerfert; TUNIT-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QB3, align 4 412fe12d313SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 [[V]]) #[[ATTR7]] 4133a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 4143a3ea430SJohannes Doerfert; TUNIT: S: 415fe12d313SJohannes Doerfert; TUNIT-NEXT: store i32 2, ptr addrspace(3) @QB3, align 4 4163a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 0) #[[ATTR7]] 4173a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 1) #[[ATTR7]] 4183a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]] 4193a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 3) #[[ATTR7]] 4203a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 4213a3ea430SJohannes Doerfert; 4223a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4b3 4233a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 424fe12d313SJohannes Doerfert; CGSCC-NEXT: store i32 0, ptr addrspace(3) @QB3, align 4 4253a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 4263a3ea430SJohannes Doerfert; CGSCC: L: 4273a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @sync() 428fe12d313SJohannes Doerfert; CGSCC-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QB3, align 4 429fe12d313SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 [[V]]) #[[ATTR6]] 4303a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 4313a3ea430SJohannes Doerfert; CGSCC: S: 432fe12d313SJohannes Doerfert; CGSCC-NEXT: store i32 2, ptr addrspace(3) @QB3, align 4 4333a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 0) #[[ATTR6]] 4343a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 1) #[[ATTR6]] 4353a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]] 4363a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 3) #[[ATTR6]] 4373a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 4383a3ea430SJohannes Doerfert; 4393a3ea430SJohannes Doerfert store i32 0, ptr addrspace(3) @QB3 4403a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 4413a3ea430SJohannes DoerfertL: 4423a3ea430SJohannes Doerfert call void @sync(); 4433a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QB3 4443a3ea430SJohannes Doerfert call void @use1(i32 %v) 4453a3ea430SJohannes Doerfert ret void 4463a3ea430SJohannes DoerfertS: 4473a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QB3 4483a3ea430SJohannes Doerfert call void @use1(i32 0) 4493a3ea430SJohannes Doerfert call void @use1(i32 1) 4503a3ea430SJohannes Doerfert call void @use1(i32 2) 4513a3ea430SJohannes Doerfert call void @use1(i32 3) 4523a3ea430SJohannes Doerfert ret void 4533a3ea430SJohannes Doerfert} 4543a3ea430SJohannes Doerfert 4553a3ea430SJohannes Doerfert 456*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4c1(i1 %c) "kernel" { 4573a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse 4583a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4c1 4593a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 4603a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 4613a3ea430SJohannes Doerfert; TUNIT: L: 4623a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 0) #[[ATTR7]] 4633a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 4643a3ea430SJohannes Doerfert; TUNIT: S: 4653a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 4663a3ea430SJohannes Doerfert; 4673a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse 4683a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4c1 4693a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 4703a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 4713a3ea430SJohannes Doerfert; CGSCC: L: 4723a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 0) #[[ATTR6]] 4733a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 4743a3ea430SJohannes Doerfert; CGSCC: S: 4753a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 4763a3ea430SJohannes Doerfert; 4773a3ea430SJohannes Doerfert store i32 0, ptr addrspace(3) @QC1 4783a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 4793a3ea430SJohannes DoerfertL: 4803a3ea430SJohannes Doerfert call void @barrier(); 4813a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QC1 4823a3ea430SJohannes Doerfert call void @use1(i32 %v) 4833a3ea430SJohannes Doerfert ret void 4843a3ea430SJohannes DoerfertS: 4853a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QC1 4863a3ea430SJohannes Doerfert call void @barrier(); 4873a3ea430SJohannes Doerfert ret void 4883a3ea430SJohannes Doerfert} 4893a3ea430SJohannes Doerfert 4907e77e812SJohannes Doerfert; We should not replace the load or delete the second store. 491*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4d1(i1 %c) "kernel" { 4923a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse 4933a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4d1 4943a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 4957e77e812SJohannes Doerfert; TUNIT-NEXT: store i32 0, ptr addrspace(3) @QD1, align 4 4963a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 4973a3ea430SJohannes Doerfert; TUNIT: L: 4987e77e812SJohannes Doerfert; TUNIT-NEXT: call void @barrier() #[[ATTR7]] 4997e77e812SJohannes Doerfert; TUNIT-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QD1, align 4 5007e77e812SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 [[V]]) #[[ATTR7]] 5013a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 5023a3ea430SJohannes Doerfert; TUNIT: S: 5037e77e812SJohannes Doerfert; TUNIT-NEXT: store i32 2, ptr addrspace(3) @QD1, align 4 5043a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 5053a3ea430SJohannes Doerfert; 5063a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse 5073a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4d1 5083a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 5097e77e812SJohannes Doerfert; CGSCC-NEXT: store i32 0, ptr addrspace(3) @QD1, align 4 5103a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 5113a3ea430SJohannes Doerfert; CGSCC: L: 5127e77e812SJohannes Doerfert; CGSCC-NEXT: call void @barrier() #[[ATTR6]] 5137e77e812SJohannes Doerfert; CGSCC-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QD1, align 4 5147e77e812SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 [[V]]) #[[ATTR6]] 5153a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 5163a3ea430SJohannes Doerfert; CGSCC: S: 5177e77e812SJohannes Doerfert; CGSCC-NEXT: store i32 2, ptr addrspace(3) @QD1, align 4 5183a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 5193a3ea430SJohannes Doerfert; 5203a3ea430SJohannes Doerfert store i32 0, ptr addrspace(3) @QD1 5213a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 5223a3ea430SJohannes DoerfertL: 5233a3ea430SJohannes Doerfert call void @barrier(); 5243a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QD1 5253a3ea430SJohannes Doerfert call void @use1(i32 %v) 5263a3ea430SJohannes Doerfert ret void 5273a3ea430SJohannes DoerfertS: 5283a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QD1 5293a3ea430SJohannes Doerfert ret void 5303a3ea430SJohannes Doerfert} 5313a3ea430SJohannes Doerfert 532*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4c2(i1 %c) "kernel" { 5333a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse 5343a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4c2 5353a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 5363a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 5373a3ea430SJohannes Doerfert; TUNIT: L: 5383a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 undef) #[[ATTR7]] 5393a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 5403a3ea430SJohannes Doerfert; TUNIT: S: 5413a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 5423a3ea430SJohannes Doerfert; 5433a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse 5443a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4c2 5453a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 5463a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 5473a3ea430SJohannes Doerfert; CGSCC: L: 5483a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 undef) #[[ATTR6]] 5493a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 5503a3ea430SJohannes Doerfert; CGSCC: S: 5513a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 5523a3ea430SJohannes Doerfert; 5533a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 5543a3ea430SJohannes DoerfertL: 5553a3ea430SJohannes Doerfert call void @barrier(); 5563a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QC2 5573a3ea430SJohannes Doerfert call void @use1(i32 %v) 5583a3ea430SJohannes Doerfert ret void 5593a3ea430SJohannes DoerfertS: 5603a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QC2 5613a3ea430SJohannes Doerfert call void @barrier(); 5623a3ea430SJohannes Doerfert ret void 5633a3ea430SJohannes Doerfert} 5643a3ea430SJohannes Doerfert 5657e77e812SJohannes Doerfert; We should not replace the load with undef. 566*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4d2(i1 %c) "kernel" { 5673a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse 5683a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4d2 5693a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 5703a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 5713a3ea430SJohannes Doerfert; TUNIT: L: 5727e77e812SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]] 5733a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 5743a3ea430SJohannes Doerfert; TUNIT: S: 5753a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 5763a3ea430SJohannes Doerfert; 5773a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse 5783a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4d2 5793a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 5803a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 5813a3ea430SJohannes Doerfert; CGSCC: L: 5827e77e812SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]] 5833a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 5843a3ea430SJohannes Doerfert; CGSCC: S: 5853a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 5863a3ea430SJohannes Doerfert; 5873a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 5883a3ea430SJohannes DoerfertL: 5893a3ea430SJohannes Doerfert call void @barrier(); 5903a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QD2 5913a3ea430SJohannes Doerfert call void @use1(i32 %v) 5923a3ea430SJohannes Doerfert ret void 5933a3ea430SJohannes DoerfertS: 5943a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QD2 5953a3ea430SJohannes Doerfert ret void 5963a3ea430SJohannes Doerfert} 5973a3ea430SJohannes Doerfert 598*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4c3(i1 %c) "kernel" { 5993a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse 6003a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4c3 6013a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 6023a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 6033a3ea430SJohannes Doerfert; TUNIT: L: 6043a3ea430SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 undef) #[[ATTR7]] 6053a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 6063a3ea430SJohannes Doerfert; TUNIT: S: 6073a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 6083a3ea430SJohannes Doerfert; 6093a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse 6103a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4c3 6113a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 6123a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 6133a3ea430SJohannes Doerfert; CGSCC: L: 6143a3ea430SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 undef) #[[ATTR6]] 6153a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 6163a3ea430SJohannes Doerfert; CGSCC: S: 6173a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 6183a3ea430SJohannes Doerfert; 6193a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 6203a3ea430SJohannes DoerfertL: 6213a3ea430SJohannes Doerfert call void @barrier(); 6223a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QC3 6233a3ea430SJohannes Doerfert call void @use1(i32 %v) 6243a3ea430SJohannes Doerfert ret void 6253a3ea430SJohannes DoerfertS: 6263a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QC3 6273a3ea430SJohannes Doerfert call void @barrier(); 6283a3ea430SJohannes Doerfert ret void 6293a3ea430SJohannes Doerfert} 6303a3ea430SJohannes Doerfert 6317e77e812SJohannes Doerfert; We should not replace the load with undef. 632*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4d3(i1 %c) "kernel" { 6333a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse 6343a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4d3 6353a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 6363a3ea430SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 6373a3ea430SJohannes Doerfert; TUNIT: L: 6387e77e812SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]] 6393a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 6403a3ea430SJohannes Doerfert; TUNIT: S: 6413a3ea430SJohannes Doerfert; TUNIT-NEXT: ret void 6423a3ea430SJohannes Doerfert; 6433a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse 6443a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4d3 6453a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] { 6463a3ea430SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 6473a3ea430SJohannes Doerfert; CGSCC: L: 6487e77e812SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]] 6493a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 6503a3ea430SJohannes Doerfert; CGSCC: S: 6513a3ea430SJohannes Doerfert; CGSCC-NEXT: ret void 6523a3ea430SJohannes Doerfert; 6533a3ea430SJohannes Doerfert br i1 %c, label %S, label %L 6543a3ea430SJohannes DoerfertL: 6553a3ea430SJohannes Doerfert call void @barrier(); 6563a3ea430SJohannes Doerfert %v = load i32, ptr addrspace(3) @QD3 6573a3ea430SJohannes Doerfert call void @use1(i32 %v) 6583a3ea430SJohannes Doerfert ret void 6593a3ea430SJohannes DoerfertS: 6603a3ea430SJohannes Doerfert store i32 2, ptr addrspace(3) @QD3 6613a3ea430SJohannes Doerfert ret void 6623a3ea430SJohannes Doerfert} 6633a3ea430SJohannes Doerfert 664*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel_unknown_and_aligned1(i1 %c) "kernel" { 6654009f84dSJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned1 6664009f84dSJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 6674009f84dSJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 6684009f84dSJohannes Doerfert; TUNIT: L: 66978b8f1f7SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]] 6704009f84dSJohannes Doerfert; TUNIT-NEXT: ret void 6714009f84dSJohannes Doerfert; TUNIT: S: 6724009f84dSJohannes Doerfert; TUNIT-NEXT: call void @sync() 6734009f84dSJohannes Doerfert; TUNIT-NEXT: call void @barrier() #[[ATTR7]] 6744009f84dSJohannes Doerfert; TUNIT-NEXT: call void @sync() 6754009f84dSJohannes Doerfert; TUNIT-NEXT: ret void 6764009f84dSJohannes Doerfert; 6774009f84dSJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned1 6784009f84dSJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 6794009f84dSJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 6804009f84dSJohannes Doerfert; CGSCC: L: 68178b8f1f7SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]] 6824009f84dSJohannes Doerfert; CGSCC-NEXT: ret void 6834009f84dSJohannes Doerfert; CGSCC: S: 6844009f84dSJohannes Doerfert; CGSCC-NEXT: call void @sync() 6854009f84dSJohannes Doerfert; CGSCC-NEXT: call void @barrier() #[[ATTR6]] 6864009f84dSJohannes Doerfert; CGSCC-NEXT: call void @sync() 6874009f84dSJohannes Doerfert; CGSCC-NEXT: ret void 6884009f84dSJohannes Doerfert; 6894009f84dSJohannes Doerfert br i1 %c, label %S, label %L 6904009f84dSJohannes DoerfertL: 6914009f84dSJohannes Doerfert call void @barrier(); 6924009f84dSJohannes Doerfert %v = load i32, ptr addrspace(3) @UAA1 6934009f84dSJohannes Doerfert call void @use1(i32 %v) 6944009f84dSJohannes Doerfert ret void 6954009f84dSJohannes DoerfertS: 6964009f84dSJohannes Doerfert call void @sync(); 6974009f84dSJohannes Doerfert store i32 2, ptr addrspace(3) @UAA1 6984009f84dSJohannes Doerfert call void @barrier(); 6994009f84dSJohannes Doerfert call void @sync(); 7004009f84dSJohannes Doerfert ret void 7014009f84dSJohannes Doerfert} 7024009f84dSJohannes Doerfert 703*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel_unknown_and_aligned2(i1 %c) "kernel" { 7044009f84dSJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned2 7054009f84dSJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 7064009f84dSJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 7074009f84dSJohannes Doerfert; TUNIT: L: 7084009f84dSJohannes Doerfert; TUNIT-NEXT: call void @sync() 70978b8f1f7SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]] 7104009f84dSJohannes Doerfert; TUNIT-NEXT: ret void 7114009f84dSJohannes Doerfert; TUNIT: S: 7124009f84dSJohannes Doerfert; TUNIT-NEXT: call void @sync() 7134009f84dSJohannes Doerfert; TUNIT-NEXT: call void @barrier() #[[ATTR7]] 7144009f84dSJohannes Doerfert; TUNIT-NEXT: call void @sync() 7154009f84dSJohannes Doerfert; TUNIT-NEXT: ret void 7164009f84dSJohannes Doerfert; 7174009f84dSJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned2 7184009f84dSJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 7194009f84dSJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 7204009f84dSJohannes Doerfert; CGSCC: L: 7214009f84dSJohannes Doerfert; CGSCC-NEXT: call void @sync() 72278b8f1f7SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]] 7234009f84dSJohannes Doerfert; CGSCC-NEXT: ret void 7244009f84dSJohannes Doerfert; CGSCC: S: 7254009f84dSJohannes Doerfert; CGSCC-NEXT: call void @sync() 7264009f84dSJohannes Doerfert; CGSCC-NEXT: call void @barrier() #[[ATTR6]] 7274009f84dSJohannes Doerfert; CGSCC-NEXT: call void @sync() 7284009f84dSJohannes Doerfert; CGSCC-NEXT: ret void 7294009f84dSJohannes Doerfert; 7304009f84dSJohannes Doerfert br i1 %c, label %S, label %L 7314009f84dSJohannes DoerfertL: 7324009f84dSJohannes Doerfert call void @sync(); 7334009f84dSJohannes Doerfert %v = load i32, ptr addrspace(3) @UAA2 7344009f84dSJohannes Doerfert call void @use1(i32 %v) 7354009f84dSJohannes Doerfert ret void 7364009f84dSJohannes DoerfertS: 7374009f84dSJohannes Doerfert call void @sync(); 7384009f84dSJohannes Doerfert store i32 2, ptr addrspace(3) @UAA2 7394009f84dSJohannes Doerfert call void @barrier(); 7404009f84dSJohannes Doerfert call void @sync(); 7414009f84dSJohannes Doerfert ret void 7424009f84dSJohannes Doerfert} 7434009f84dSJohannes Doerfert 744*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel_unknown_and_aligned3(i1 %c) "kernel" { 7450cd8a289SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned3 7460cd8a289SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 7470cd8a289SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 7480cd8a289SJohannes Doerfert; TUNIT: L: 7490cd8a289SJohannes Doerfert; TUNIT-NEXT: call void @sync() 7500cd8a289SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]] 7510cd8a289SJohannes Doerfert; TUNIT-NEXT: call void @barrier() #[[ATTR7]] 7520cd8a289SJohannes Doerfert; TUNIT-NEXT: ret void 7530cd8a289SJohannes Doerfert; TUNIT: S: 7540cd8a289SJohannes Doerfert; TUNIT-NEXT: call void @sync() 7550cd8a289SJohannes Doerfert; TUNIT-NEXT: call void @sync() 7560cd8a289SJohannes Doerfert; TUNIT-NEXT: ret void 7570cd8a289SJohannes Doerfert; 7580cd8a289SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned3 7590cd8a289SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 7600cd8a289SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 7610cd8a289SJohannes Doerfert; CGSCC: L: 7620cd8a289SJohannes Doerfert; CGSCC-NEXT: call void @sync() 7630cd8a289SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]] 7640cd8a289SJohannes Doerfert; CGSCC-NEXT: call void @barrier() #[[ATTR6]] 7650cd8a289SJohannes Doerfert; CGSCC-NEXT: ret void 7660cd8a289SJohannes Doerfert; CGSCC: S: 7670cd8a289SJohannes Doerfert; CGSCC-NEXT: call void @sync() 7680cd8a289SJohannes Doerfert; CGSCC-NEXT: call void @sync() 7690cd8a289SJohannes Doerfert; CGSCC-NEXT: ret void 7700cd8a289SJohannes Doerfert; 7710cd8a289SJohannes Doerfert br i1 %c, label %S, label %L 7720cd8a289SJohannes DoerfertL: 7730cd8a289SJohannes Doerfert call void @sync(); 7740cd8a289SJohannes Doerfert %v = load i32, ptr addrspace(3) @UAA3 7750cd8a289SJohannes Doerfert call void @use1(i32 %v) 7760cd8a289SJohannes Doerfert call void @barrier(); 7770cd8a289SJohannes Doerfert ret void 7780cd8a289SJohannes DoerfertS: 7790cd8a289SJohannes Doerfert call void @sync(); 7800cd8a289SJohannes Doerfert store i32 2, ptr addrspace(3) @UAA3 7810cd8a289SJohannes Doerfert call void @sync(); 7820cd8a289SJohannes Doerfert ret void 7830cd8a289SJohannes Doerfert} 7840cd8a289SJohannes Doerfert 785*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel_unknown_and_not_aligned1(i1 %c) "kernel" { 7860cd8a289SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel_unknown_and_not_aligned1 7870cd8a289SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 7880cd8a289SJohannes Doerfert; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 7890cd8a289SJohannes Doerfert; TUNIT: L: 7900cd8a289SJohannes Doerfert; TUNIT-NEXT: call void @sync() 7910cd8a289SJohannes Doerfert; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]] 7920cd8a289SJohannes Doerfert; TUNIT-NEXT: ret void 7930cd8a289SJohannes Doerfert; TUNIT: S: 7940cd8a289SJohannes Doerfert; TUNIT-NEXT: call void @sync() 7950cd8a289SJohannes Doerfert; TUNIT-NEXT: call void @sync() 7960cd8a289SJohannes Doerfert; TUNIT-NEXT: ret void 7970cd8a289SJohannes Doerfert; 7980cd8a289SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel_unknown_and_not_aligned1 7990cd8a289SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 8000cd8a289SJohannes Doerfert; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]] 8010cd8a289SJohannes Doerfert; CGSCC: L: 8020cd8a289SJohannes Doerfert; CGSCC-NEXT: call void @sync() 8030cd8a289SJohannes Doerfert; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]] 8040cd8a289SJohannes Doerfert; CGSCC-NEXT: ret void 8050cd8a289SJohannes Doerfert; CGSCC: S: 8060cd8a289SJohannes Doerfert; CGSCC-NEXT: call void @sync() 8070cd8a289SJohannes Doerfert; CGSCC-NEXT: call void @sync() 8080cd8a289SJohannes Doerfert; CGSCC-NEXT: ret void 8090cd8a289SJohannes Doerfert; 8100cd8a289SJohannes Doerfert br i1 %c, label %S, label %L 8110cd8a289SJohannes DoerfertL: 8120cd8a289SJohannes Doerfert call void @sync(); 8130cd8a289SJohannes Doerfert %v = load i32, ptr addrspace(3) @UANA1 8140cd8a289SJohannes Doerfert call void @use1(i32 %v) 8150cd8a289SJohannes Doerfert ret void 8160cd8a289SJohannes DoerfertS: 8170cd8a289SJohannes Doerfert call void @sync(); 8180cd8a289SJohannes Doerfert store i32 2, ptr addrspace(3) @UANA1 8190cd8a289SJohannes Doerfert call void @sync(); 8200cd8a289SJohannes Doerfert ret void 8210cd8a289SJohannes Doerfert} 8220cd8a289SJohannes Doerfert 823578d5073SJohannes Doerfertdeclare void @sync() 8245238df7eSJohannes Doerfertdeclare void @barrier() norecurse nounwind nocallback "llvm.assume"="ompx_aligned_barrier" 8254e0f464cSJohannes Doerfertdeclare void @use1(i32) nosync norecurse nounwind nocallback 826b8cbc5c0SJohannes Doerfertdeclare i32 @__kmpc_target_init(ptr, ptr) nocallback 82710068cd6SShilei Tiandeclare void @__kmpc_target_deinit() nocallback 8287bc88cbeSJohannes Doerfertdeclare void @llvm.assume(i1) 8294e0f464cSJohannes Doerfert 8304e0f464cSJohannes Doerfert!llvm.module.flags = !{!0, !1} 8314e0f464cSJohannes Doerfert 8324e0f464cSJohannes Doerfert!0 = !{i32 7, !"openmp", i32 50} 8334e0f464cSJohannes Doerfert!1 = !{i32 7, !"openmp-device", i32 50} 8344e0f464cSJohannes Doerfert 8354e0f464cSJohannes Doerfert;. 83677dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR0]] = { norecurse "kernel" } 83777dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR1]] = { "kernel" } 83877dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR2:[0-9]+]] = { nocallback norecurse nounwind "llvm.assume"="ompx_aligned_barrier" } 83977dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR3:[0-9]+]] = { nocallback norecurse nosync nounwind } 84077dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR4:[0-9]+]] = { nocallback } 841fa367d15SJohannes Doerfert; TUNIT: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) } 84277dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR6]] = { nounwind "llvm.assume"="ompx_aligned_barrier" } 84377dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR7]] = { nounwind } 84477dbd1d7SJohannes Doerfert;. 84577dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR0]] = { norecurse "kernel" } 84677dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR1]] = { "kernel" } 84777dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR2:[0-9]+]] = { nocallback norecurse nounwind "llvm.assume"="ompx_aligned_barrier" } 84877dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR3:[0-9]+]] = { nocallback norecurse nosync nounwind } 84977dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR4:[0-9]+]] = { nocallback } 850fa367d15SJohannes Doerfert; CGSCC: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) } 85177dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR6]] = { nounwind } 8524e0f464cSJohannes Doerfert;. 853cd3a4c31SJohannes Doerfert; TUNIT: [[META0:![0-9]+]] = !{i32 7, !"openmp", i32 50} 854cd3a4c31SJohannes Doerfert; TUNIT: [[META1:![0-9]+]] = !{i32 7, !"openmp-device", i32 50} 855cd3a4c31SJohannes Doerfert;. 856cd3a4c31SJohannes Doerfert; CGSCC: [[META0:![0-9]+]] = !{i32 7, !"openmp", i32 50} 857cd3a4c31SJohannes Doerfert; CGSCC: [[META1:![0-9]+]] = !{i32 7, !"openmp-device", i32 50} 8584e0f464cSJohannes Doerfert;. 859