brintos

brintos / llvm-project-archived public Read only

0
0
Text · 19.6 KiB · 31df85a Raw
455 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals2; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal  -attributor-annotate-decl-cs  -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT3; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC4 5target triple = "amdgcn-amd-amdhsa"6 7%struct.ident_t = type { i32, i32, i32, i32, ptr }8@ReachableKernel = internal addrspace(3) global i32 3, align 49@UnreachableKernel = internal addrspace(3) global i32 42, align 410@ReachableKernelAS0 = internal global i32 7, align 411@AS3OneKernelAtATime = internal addrspace(3) global i32 42, align 412 13;.14; CHECK: @ReachableKernel = internal addrspace(3) global i32 3, align 415; CHECK: @UnreachableKernel = internal addrspace(3) global i32 42, align 416; CHECK: @ReachableKernelAS0 = internal global i32 7, align 417; CHECK: @AS3OneKernelAtATime = internal addrspace(3) global i32 42, align 418; CHECK: @ReachableNonKernel = internal addrspace(3) global i32 0, align 419; CHECK: @UnreachableNonKernel = internal addrspace(3) global i32 0, align 420;.21define dso_local void @kernel(i32 %C) norecurse "kernel" {22; TUNIT: Function Attrs: norecurse nosync nounwind23; TUNIT-LABEL: define {{[^@]+}}@kernel24; TUNIT-SAME: (i32 [[C:%.*]]) #[[ATTR0:[0-9]+]] {25; TUNIT-NEXT:  entry:26; TUNIT-NEXT:    call void @level1Kernel(i32 [[C]]) #[[ATTR1:[0-9]+]]27; TUNIT-NEXT:    ret void28;29; CGSCC: Function Attrs: norecurse nosync nounwind30; CGSCC-LABEL: define {{[^@]+}}@kernel31; CGSCC-SAME: (i32 [[C:%.*]]) #[[ATTR0:[0-9]+]] {32; CGSCC-NEXT:  entry:33; CGSCC-NEXT:    call void @level1Kernel(i32 [[C]]) #[[ATTR4:[0-9]+]]34; CGSCC-NEXT:    ret void35;36entry:37  call void @level1Kernel(i32 %C)38  ret void39}40 41define internal void @level1Kernel(i32 %C) {42; TUNIT: Function Attrs: norecurse nosync nounwind43; TUNIT-LABEL: define {{[^@]+}}@level1Kernel44; TUNIT-SAME: (i32 [[C:%.*]]) #[[ATTR1]] {45; TUNIT-NEXT:  entry:46; TUNIT-NEXT:    call void @level2Kernelall_early() #[[ATTR4:[0-9]+]]47; TUNIT-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[C]], 048; TUNIT-NEXT:    br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]49; TUNIT:       if.then:50; TUNIT-NEXT:    call void @level2Kernela() #[[ATTR5:[0-9]+]]51; TUNIT-NEXT:    br label [[IF_END:%.*]]52; TUNIT:       if.else:53; TUNIT-NEXT:    call void @level2Kernelb() #[[ATTR5]]54; TUNIT-NEXT:    br label [[IF_END]]55; TUNIT:       if.end:56; TUNIT-NEXT:    call void @level2Kernelall_late() #[[ATTR6:[0-9]+]]57; TUNIT-NEXT:    ret void58;59; CGSCC: Function Attrs: norecurse nosync nounwind60; CGSCC-LABEL: define {{[^@]+}}@level1Kernel61; CGSCC-SAME: (i32 [[C:%.*]]) #[[ATTR1:[0-9]+]] {62; CGSCC-NEXT:  entry:63; CGSCC-NEXT:    call void @level2Kernelall_early() #[[ATTR5:[0-9]+]]64; CGSCC-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[C]], 065; CGSCC-NEXT:    br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]66; CGSCC:       if.then:67; CGSCC-NEXT:    call void @level2Kernela() #[[ATTR4]]68; CGSCC-NEXT:    br label [[IF_END:%.*]]69; CGSCC:       if.else:70; CGSCC-NEXT:    call void @level2Kernelb() #[[ATTR4]]71; CGSCC-NEXT:    br label [[IF_END]]72; CGSCC:       if.end:73; CGSCC-NEXT:    call void @level2Kernelall_late() #[[ATTR6:[0-9]+]]74; CGSCC-NEXT:    ret void75;76entry:77  call void @level2Kernelall_early()78  %tobool = icmp ne i32 %C, 079  br i1 %tobool, label %if.then, label %if.else80 81if.then:                                          ; preds = %entry82  call void @level2Kernela()83  br label %if.end84 85if.else:                                          ; preds = %entry86  call void @level2Kernelb()87  br label %if.end88 89if.end:                                           ; preds = %if.else, %if.then90  call void @level2Kernelall_late()91  ret void92}93 94define internal void @level2Kernelall_early() {95; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)96; CHECK-LABEL: define {{[^@]+}}@level2Kernelall_early97; CHECK-SAME: () #[[ATTR2:[0-9]+]] {98; CHECK-NEXT:  entry:99; CHECK-NEXT:    store i32 1, ptr @ReachableKernelAS0, align 4100; CHECK-NEXT:    store i32 1, ptr addrspace(3) @ReachableKernel, align 4101; CHECK-NEXT:    ret void102;103entry:104  store i32 1, ptr @ReachableKernelAS0, align 4105  store i32 1, ptr addrspacecast (ptr addrspace(3) @ReachableKernel to ptr), align 4106  ret void107}108 109define internal void @level2Kernela() {110; TUNIT: Function Attrs: norecurse nosync nounwind111; TUNIT-LABEL: define {{[^@]+}}@level2Kernela112; TUNIT-SAME: () #[[ATTR1]] {113; TUNIT-NEXT:  entry:114; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(3) @ReachableKernel, align 4115; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr @ReachableKernelAS0, align 4116; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspace(3) @UnreachableKernel, align 4117; TUNIT-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 noundef [[TMP2]]) #[[ATTR7:[0-9]+]]118; TUNIT-NEXT:    ret void119;120; CGSCC: Function Attrs: nosync nounwind121; CGSCC-LABEL: define {{[^@]+}}@level2Kernela122; CGSCC-SAME: () #[[ATTR3:[0-9]+]] {123; CGSCC-NEXT:  entry:124; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(3) @ReachableKernel, align 4125; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr @ReachableKernelAS0, align 4126; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspace(3) @UnreachableKernel, align 4127; CGSCC-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 noundef [[TMP2]]) #[[ATTR4]]128; CGSCC-NEXT:    ret void129;130entry:131  %0 = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableKernel to ptr), align 4132  %1 = load i32, ptr @ReachableKernelAS0, align 4133  %2 = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableKernel to ptr), align 4134  call void @use(i32 %0, i32 %1, i32 %2)135  ret void136}137 138define internal void @level2Kernelb() {139; TUNIT: Function Attrs: norecurse nosync nounwind140; TUNIT-LABEL: define {{[^@]+}}@level2Kernelb141; TUNIT-SAME: () #[[ATTR1]] {142; TUNIT-NEXT:  entry:143; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(3) @ReachableKernel, align 4144; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr @ReachableKernelAS0, align 4145; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspace(3) @UnreachableKernel, align 4146; TUNIT-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 noundef [[TMP2]]) #[[ATTR7]]147; TUNIT-NEXT:    ret void148;149; CGSCC: Function Attrs: nosync nounwind150; CGSCC-LABEL: define {{[^@]+}}@level2Kernelb151; CGSCC-SAME: () #[[ATTR3]] {152; CGSCC-NEXT:  entry:153; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(3) @ReachableKernel, align 4154; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr @ReachableKernelAS0, align 4155; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspace(3) @UnreachableKernel, align 4156; CGSCC-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 noundef [[TMP2]]) #[[ATTR4]]157; CGSCC-NEXT:    ret void158;159entry:160  %0 = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableKernel to ptr), align 4161  %1 = load i32, ptr @ReachableKernelAS0, align 4162  %2 = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableKernel to ptr), align 4163  call void @use(i32 %0, i32 %1, i32 %2)164  ret void165}166 167define internal void @level2Kernelall_late() {168; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)169; CHECK-LABEL: define {{[^@]+}}@level2Kernelall_late170; CHECK-SAME: () #[[ATTR2]] {171; CHECK-NEXT:  entry:172; CHECK-NEXT:    store i32 1, ptr addrspace(3) @UnreachableKernel, align 4173; CHECK-NEXT:    ret void174;175entry:176  store i32 1, ptr addrspacecast (ptr addrspace(3) @UnreachableKernel to ptr), align 4177  ret void178}179 180@ReachableNonKernel = internal addrspace(3) global i32 0, align 4181@UnreachableNonKernel = internal addrspace(3) global i32 0, align 4182 183define dso_local void @non_kernel(i32 %C) norecurse {184; TUNIT: Function Attrs: norecurse nosync nounwind185; TUNIT-LABEL: define {{[^@]+}}@non_kernel186; TUNIT-SAME: (i32 [[C:%.*]]) #[[ATTR1]] {187; TUNIT-NEXT:  entry:188; TUNIT-NEXT:    call void @level1(i32 [[C]]) #[[ATTR1]]189; TUNIT-NEXT:    ret void190;191; CGSCC: Function Attrs: norecurse nosync nounwind192; CGSCC-LABEL: define {{[^@]+}}@non_kernel193; CGSCC-SAME: (i32 [[C:%.*]]) #[[ATTR1]] {194; CGSCC-NEXT:  entry:195; CGSCC-NEXT:    call void @level1(i32 [[C]]) #[[ATTR4]]196; CGSCC-NEXT:    ret void197;198entry:199  call void @level1(i32 %C)200  ret void201}202 203define internal void @level1(i32 %C) {204; TUNIT: Function Attrs: norecurse nosync nounwind205; TUNIT-LABEL: define {{[^@]+}}@level1206; TUNIT-SAME: (i32 [[C:%.*]]) #[[ATTR1]] {207; TUNIT-NEXT:  entry:208; TUNIT-NEXT:    [[LOCAL_ALLOCA:%.*]] = alloca i32, align 4, addrspace(5)209; TUNIT-NEXT:    [[LOCAL:%.*]] = addrspacecast ptr addrspace(5) [[LOCAL_ALLOCA]] to ptr210; TUNIT-NEXT:    call void @level2all_early(ptr nofree noundef nonnull writeonly align 4 captures(none) dereferenceable(4) [[LOCAL]]) #[[ATTR4]]211; TUNIT-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[C]], 0212; TUNIT-NEXT:    br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]213; TUNIT:       if.then:214; TUNIT-NEXT:    call void @level2a() #[[ATTR5]]215; TUNIT-NEXT:    br label [[IF_END:%.*]]216; TUNIT:       if.else:217; TUNIT-NEXT:    call void @level2b() #[[ATTR5]]218; TUNIT-NEXT:    br label [[IF_END]]219; TUNIT:       if.end:220; TUNIT-NEXT:    call void @level2all_late(ptr nofree noundef writeonly align 4 captures(none) dereferenceable_or_null(4) [[LOCAL]]) #[[ATTR6]]221; TUNIT-NEXT:    ret void222;223; CGSCC: Function Attrs: norecurse nosync nounwind224; CGSCC-LABEL: define {{[^@]+}}@level1225; CGSCC-SAME: (i32 [[C:%.*]]) #[[ATTR1]] {226; CGSCC-NEXT:  entry:227; CGSCC-NEXT:    [[LOCAL_ALLOCA:%.*]] = alloca i32, align 4, addrspace(5)228; CGSCC-NEXT:    [[LOCAL:%.*]] = addrspacecast ptr addrspace(5) [[LOCAL_ALLOCA]] to ptr229; CGSCC-NEXT:    call void @level2all_early(ptr nofree noundef nonnull writeonly align 4 captures(none) dereferenceable(4) [[LOCAL]]) #[[ATTR5]]230; CGSCC-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[C]], 0231; CGSCC-NEXT:    br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]232; CGSCC:       if.then:233; CGSCC-NEXT:    call void @level2a(ptr nofree noundef nonnull readonly align 4 captures(none) dereferenceable(4) [[LOCAL]]) #[[ATTR4]]234; CGSCC-NEXT:    br label [[IF_END:%.*]]235; CGSCC:       if.else:236; CGSCC-NEXT:    call void @level2b(ptr nofree noundef nonnull readonly align 4 captures(none) dereferenceable(4) [[LOCAL]]) #[[ATTR4]]237; CGSCC-NEXT:    br label [[IF_END]]238; CGSCC:       if.end:239; CGSCC-NEXT:    call void @level2all_late(ptr nofree noundef nonnull writeonly align 4 captures(none) dereferenceable(4) [[LOCAL]]) #[[ATTR6]]240; CGSCC-NEXT:    ret void241;242entry:243  %local.alloca = alloca i32, addrspace(5)244  %local = addrspacecast ptr addrspace(5) %local.alloca to ptr245  call void @level2all_early(ptr %local)246  %tobool = icmp ne i32 %C, 0247  br i1 %tobool, label %if.then, label %if.else248 249if.then:                                          ; preds = %entry250  call void @level2a(ptr %local)251  br label %if.end252 253if.else:                                          ; preds = %entry254  call void @level2b(ptr %local)255  br label %if.end256 257if.end:                                           ; preds = %if.else, %if.then258  call void @level2all_late(ptr %local)259  ret void260}261 262define internal void @level2all_early(ptr %addr) {263; TUNIT: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)264; TUNIT-LABEL: define {{[^@]+}}@level2all_early265; TUNIT-SAME: (ptr nofree noundef nonnull writeonly align 4 captures(none) dereferenceable(4) [[ADDR:%.*]]) #[[ATTR2]] {266; TUNIT-NEXT:  entry:267; TUNIT-NEXT:    store i32 1, ptr addrspace(3) @ReachableNonKernel, align 4268; TUNIT-NEXT:    [[TMP0:%.*]] = addrspacecast ptr [[ADDR]] to ptr addrspace(5)269; TUNIT-NEXT:    ret void270;271; CGSCC: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)272; CGSCC-LABEL: define {{[^@]+}}@level2all_early273; CGSCC-SAME: (ptr nofree noundef nonnull writeonly align 4 captures(none) dereferenceable(4) [[ADDR:%.*]]) #[[ATTR2]] {274; CGSCC-NEXT:  entry:275; CGSCC-NEXT:    store i32 1, ptr addrspace(3) @ReachableNonKernel, align 4276; CGSCC-NEXT:    store i32 17, ptr [[ADDR]], align 4277; CGSCC-NEXT:    ret void278;279entry:280  store i32 1, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4281  store i32 17, ptr %addr, align 4282  ret void283}284 285define internal void @level2a(ptr %addr) {286; TUNIT: Function Attrs: norecurse nosync nounwind memory(readwrite, argmem: none)287; TUNIT-LABEL: define {{[^@]+}}@level2a288; TUNIT-SAME: () #[[ATTR3:[0-9]+]] {289; TUNIT-NEXT:  entry:290; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(3) @ReachableNonKernel, align 4291; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr addrspace(3) @UnreachableNonKernel, align 4292; TUNIT-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 17) #[[ATTR7]]293; TUNIT-NEXT:    ret void294;295; CGSCC: Function Attrs: nosync nounwind296; CGSCC-LABEL: define {{[^@]+}}@level2a297; CGSCC-SAME: (ptr nofree noundef nonnull readonly align 4 captures(none) dereferenceable(4) [[ADDR:%.*]]) #[[ATTR3]] {298; CGSCC-NEXT:  entry:299; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(3) @ReachableNonKernel, align 4300; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr addrspace(3) @UnreachableNonKernel, align 4301; CGSCC-NEXT:    [[QQQQ2:%.*]] = load i32, ptr [[ADDR]], align 4302; CGSCC-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 [[QQQQ2]]) #[[ATTR4]]303; CGSCC-NEXT:    ret void304;305entry:306  %0 = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4307  %1 = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableNonKernel to ptr), align 4308  %qqqq2 = load i32, ptr %addr309  call void @use(i32 %0, i32 %1, i32 %qqqq2)310  ret void311}312 313define internal void @level2b(ptr %addr) {314; TUNIT: Function Attrs: norecurse nosync nounwind memory(readwrite, argmem: none)315; TUNIT-LABEL: define {{[^@]+}}@level2b316; TUNIT-SAME: () #[[ATTR3]] {317; TUNIT-NEXT:  entry:318; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(3) @ReachableNonKernel, align 4319; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr addrspace(3) @UnreachableNonKernel, align 4320; TUNIT-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 17) #[[ATTR7]]321; TUNIT-NEXT:    ret void322;323; CGSCC: Function Attrs: nosync nounwind324; CGSCC-LABEL: define {{[^@]+}}@level2b325; CGSCC-SAME: (ptr nofree noundef nonnull readonly align 4 captures(none) dereferenceable(4) [[ADDR:%.*]]) #[[ATTR3]] {326; CGSCC-NEXT:  entry:327; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(3) @ReachableNonKernel, align 4328; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr addrspace(3) @UnreachableNonKernel, align 4329; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ADDR]], align 4330; CGSCC-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 [[TMP2]]) #[[ATTR4]]331; CGSCC-NEXT:    ret void332;333entry:334  %0 = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4335  %1 = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableNonKernel to ptr), align 4336  %2 = load i32, ptr %addr337  call void @use(i32 %0, i32 %1, i32 %2)338  ret void339}340 341define internal void @level2all_late(ptr %addr) {342; TUNIT: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)343; TUNIT-LABEL: define {{[^@]+}}@level2all_late344; TUNIT-SAME: (ptr nofree noundef nonnull writeonly align 4 captures(none) dereferenceable(4) [[ADDR:%.*]]) #[[ATTR2]] {345; TUNIT-NEXT:  entry:346; TUNIT-NEXT:    store i32 1, ptr addrspace(3) @UnreachableNonKernel, align 4347; TUNIT-NEXT:    [[TMP0:%.*]] = addrspacecast ptr [[ADDR]] to ptr addrspace(5)348; TUNIT-NEXT:    ret void349;350; CGSCC: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)351; CGSCC-LABEL: define {{[^@]+}}@level2all_late352; CGSCC-SAME: (ptr nofree noundef nonnull writeonly align 4 captures(none) dereferenceable(4) [[ADDR:%.*]]) #[[ATTR2]] {353; CGSCC-NEXT:  entry:354; CGSCC-NEXT:    store i32 1, ptr addrspace(3) @UnreachableNonKernel, align 4355; CGSCC-NEXT:    store i32 5, ptr [[ADDR]], align 4356; CGSCC-NEXT:    ret void357;358entry:359  store i32 1, ptr addrspacecast (ptr addrspace(3) @UnreachableNonKernel to ptr), align 4360  store i32 5, ptr %addr, align 4361  ret void362}363 364define dso_local void @kernel2(i32 %C) norecurse "kernel" {365; TUNIT: Function Attrs: norecurse nosync nounwind366; TUNIT-LABEL: define {{[^@]+}}@kernel2367; TUNIT-SAME: (i32 [[C:%.*]]) #[[ATTR0]] {368; TUNIT-NEXT:    [[I:%.*]] = icmp eq i32 [[C]], 42369; TUNIT-NEXT:    br i1 [[I]], label [[T:%.*]], label [[F:%.*]]370; TUNIT:       t:371; TUNIT-NEXT:    store i32 333, ptr addrspace(3) @AS3OneKernelAtATime, align 4372; TUNIT-NEXT:    br label [[F]]373; TUNIT:       f:374; TUNIT-NEXT:    [[L:%.*]] = load i32, ptr addrspace(3) @AS3OneKernelAtATime, align 4375; TUNIT-NEXT:    call void @use(i32 noundef [[L]], i32 noundef [[L]], i32 noundef [[L]]) #[[ATTR7]]376; TUNIT-NEXT:    ret void377;378; CGSCC: Function Attrs: norecurse nosync nounwind379; CGSCC-LABEL: define {{[^@]+}}@kernel2380; CGSCC-SAME: (i32 [[C:%.*]]) #[[ATTR0]] {381; CGSCC-NEXT:    [[I:%.*]] = icmp eq i32 [[C]], 42382; CGSCC-NEXT:    br i1 [[I]], label [[T:%.*]], label [[F:%.*]]383; CGSCC:       t:384; CGSCC-NEXT:    store i32 333, ptr addrspace(3) @AS3OneKernelAtATime, align 4385; CGSCC-NEXT:    br label [[F]]386; CGSCC:       f:387; CGSCC-NEXT:    [[L:%.*]] = load i32, ptr addrspace(3) @AS3OneKernelAtATime, align 4388; CGSCC-NEXT:    call void @use(i32 noundef [[L]], i32 noundef [[L]], i32 noundef [[L]]) #[[ATTR4]]389; CGSCC-NEXT:    ret void390;391  %i = icmp eq i32 %C, 42392  br i1 %i, label %t, label %f393t:394  store i32 333, ptr addrspace(3) @AS3OneKernelAtATime395  br label %f396f:397  %l = load i32, ptr addrspace(3) @AS3OneKernelAtATime398  call void @use(i32 %l,i32 %l, i32 %l)399  ret void400}401 402define dso_local void @kernel3(i32 %C) norecurse "kernel" {403; TUNIT: Function Attrs: norecurse nosync nounwind404; TUNIT-LABEL: define {{[^@]+}}@kernel3405; TUNIT-SAME: (i32 [[C:%.*]]) #[[ATTR0]] {406; TUNIT-NEXT:    [[I:%.*]] = icmp eq i32 [[C]], 42407; TUNIT-NEXT:    br i1 [[I]], label [[T:%.*]], label [[F:%.*]]408; TUNIT:       t:409; TUNIT-NEXT:    call void @use(i32 noundef 42, i32 noundef 42, i32 noundef 42) #[[ATTR7]]410; TUNIT-NEXT:    ret void411; TUNIT:       f:412; TUNIT-NEXT:    ret void413;414; CGSCC: Function Attrs: norecurse nosync nounwind415; CGSCC-LABEL: define {{[^@]+}}@kernel3416; CGSCC-SAME: (i32 [[C:%.*]]) #[[ATTR0]] {417; CGSCC-NEXT:    [[I:%.*]] = icmp eq i32 [[C]], 42418; CGSCC-NEXT:    br i1 [[I]], label [[T:%.*]], label [[F:%.*]]419; CGSCC:       t:420; CGSCC-NEXT:    call void @use(i32 noundef 42, i32 noundef 42, i32 noundef 42) #[[ATTR4]]421; CGSCC-NEXT:    ret void422; CGSCC:       f:423; CGSCC-NEXT:    ret void424;425  %i = icmp eq i32 %C, 42426  br i1 %i, label %t, label %f427t:428  %l = load i32, ptr addrspace(3) @AS3OneKernelAtATime429  call void @use(i32 %l,i32 %l, i32 %l)430  ret void431f:432  ret void433}434 435declare dso_local void @use(i32, i32, i32) nosync norecurse nounwind436 437;.438; TUNIT: attributes #[[ATTR0]] = { norecurse nosync nounwind "kernel" }439; TUNIT: attributes #[[ATTR1]] = { norecurse nosync nounwind }440; TUNIT: attributes #[[ATTR2]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(write) }441; TUNIT: attributes #[[ATTR3]] = { norecurse nosync nounwind memory(readwrite, argmem: none) }442; TUNIT: attributes #[[ATTR4]] = { nofree nosync nounwind willreturn memory(write) }443; TUNIT: attributes #[[ATTR5]] = { nosync nounwind }444; TUNIT: attributes #[[ATTR6]] = { nosync nounwind memory(write) }445; TUNIT: attributes #[[ATTR7]] = { nounwind }446;.447; CGSCC: attributes #[[ATTR0]] = { norecurse nosync nounwind "kernel" }448; CGSCC: attributes #[[ATTR1]] = { norecurse nosync nounwind }449; CGSCC: attributes #[[ATTR2]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(write) }450; CGSCC: attributes #[[ATTR3]] = { nosync nounwind }451; CGSCC: attributes #[[ATTR4]] = { nounwind }452; CGSCC: attributes #[[ATTR5]] = { nofree nounwind willreturn memory(write) }453; CGSCC: attributes #[[ATTR6]] = { nounwind memory(write) }454;.455