brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.1 KiB · 019ca8a Raw
207 lines · plain
1; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=infer-address-spaces %s | FileCheck %s2 3; Instcombine pulls the addrspacecast out of the select, make sure4;  this doesn't do something insane on non-canonical IR.5 6; CHECK-LABEL: define ptr @return_select_group_flat(7; CHECK-SAME: i1 [[C:%.*]], ptr addrspace(3) [[GROUP_PTR_0:%.*]], ptr addrspace(3) [[GROUP_PTR_1:%.*]]) #[[ATTR0:[0-9]+]] {8; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[C]], ptr addrspace(3) [[GROUP_PTR_0]], ptr addrspace(3) [[GROUP_PTR_1]]9; CHECK-NEXT:    [[TMP1:%.*]] = addrspacecast ptr addrspace(3) [[SELECT]] to ptr10; CHECK-NEXT:    ret ptr [[TMP1]]11define ptr @return_select_group_flat(i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) %group.ptr.1) #0 {12  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr13  %cast1 = addrspacecast ptr addrspace(3) %group.ptr.1 to ptr14  %select = select i1 %c, ptr %cast0, ptr %cast115  ret ptr %select16}17 18; CHECK-LABEL: @store_select_group_flat(19; CHECK: %select = select i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) %group.ptr.120; CHECK: store i32 -1, ptr addrspace(3) %select21define amdgpu_kernel void @store_select_group_flat(i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) %group.ptr.1) #0 {22  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr23  %cast1 = addrspacecast ptr addrspace(3) %group.ptr.1 to ptr24  %select = select i1 %c, ptr %cast0, ptr %cast125  store i32 -1, ptr %select26  ret void27}28 29; Make sure metadata is preserved30; CHECK-LABEL: @load_select_group_flat_md(31; CHECK: %select = select i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) %group.ptr.1, !prof !032; CHECK: %load = load i32, ptr addrspace(3) %select33define i32 @load_select_group_flat_md(i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) %group.ptr.1) #0 {34  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr35  %cast1 = addrspacecast ptr addrspace(3) %group.ptr.1 to ptr36  %select = select i1 %c, ptr %cast0, ptr %cast1, !prof !037  %load = load i32, ptr %select38  ret i32 %load39}40 41; CHECK-LABEL: @store_select_mismatch_group_private_flat(42; CHECK: %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr43; CHECK: %cast1 = addrspacecast ptr addrspace(5) %private.ptr.1 to ptr44; CHECK: %select = select i1 %c, ptr %cast0, ptr %cast145; CHECK: store i32 -1, ptr %select46define amdgpu_kernel void @store_select_mismatch_group_private_flat(i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(5) %private.ptr.1) #0 {47  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr48  %cast1 = addrspacecast ptr addrspace(5) %private.ptr.1 to ptr49  %select = select i1 %c, ptr %cast0, ptr %cast150  store i32 -1, ptr %select51  ret void52}53 54@lds0 = internal addrspace(3) global i32 123, align 455@lds1 = internal addrspace(3) global i32 456, align 456 57; CHECK-LABEL: @store_select_group_flat_null(58; CHECK: %select = select i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) addrspacecast (ptr null to ptr addrspace(3))59; CHECK: store i32 -1, ptr addrspace(3) %select60define amdgpu_kernel void @store_select_group_flat_null(i1 %c, ptr addrspace(3) %group.ptr.0) #0 {61  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr62  %select = select i1 %c, ptr %cast0, ptr null63  store i32 -1, ptr %select64  ret void65}66 67; CHECK-LABEL: @store_select_group_flat_null_swap(68; CHECK: %select = select i1 %c, ptr addrspace(3) addrspacecast (ptr null to ptr addrspace(3)), ptr addrspace(3) %group.ptr.069; CHECK: store i32 -1, ptr addrspace(3) %select70define amdgpu_kernel void @store_select_group_flat_null_swap(i1 %c, ptr addrspace(3) %group.ptr.0) #0 {71  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr72  %select = select i1 %c, ptr null, ptr %cast073  store i32 -1, ptr %select74  ret void75}76 77; CHECK-LABEL: @store_select_group_flat_poison(78; CHECK: %select = select i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) poison79; CHECK: store i32 -1, ptr addrspace(3) %select80define amdgpu_kernel void @store_select_group_flat_poison(i1 %c, ptr addrspace(3) %group.ptr.0) #0 {81  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr82  %select = select i1 %c, ptr %cast0, ptr poison83  store i32 -1, ptr %select84  ret void85}86 87; CHECK-LABEL: @store_select_group_flat_poison_swap(88; CHECK: %select = select i1 %c, ptr addrspace(3) poison, ptr addrspace(3) %group.ptr.089; CHECK: store i32 -1, ptr addrspace(3) %select90define amdgpu_kernel void @store_select_group_flat_poison_swap(i1 %c, ptr addrspace(3) %group.ptr.0) #0 {91  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr92  %select = select i1 %c, ptr poison, ptr %cast093  store i32 -1, ptr %select94  ret void95}96 97; CHECK-LABEL: @store_select_gep_group_flat_null(98; CHECK: %select = select i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) addrspacecast (ptr null to ptr addrspace(3))99; CHECK: %gep = getelementptr i32, ptr addrspace(3) %select, i64 16100; CHECK: store i32 -1, ptr addrspace(3) %gep101define amdgpu_kernel void @store_select_gep_group_flat_null(i1 %c, ptr addrspace(3) %group.ptr.0) #0 {102  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr103  %select = select i1 %c, ptr %cast0, ptr null104  %gep = getelementptr i32, ptr %select, i64 16105  store i32 -1, ptr %gep106  ret void107}108 109@global0 = internal addrspace(1) global i32 123, align 4110 111; CHECK-LABEL: @store_select_group_flat_constexpr(112; CHECK: %select = select i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) @lds1113; CHECK: store i32 7, ptr addrspace(3) %select114define amdgpu_kernel void @store_select_group_flat_constexpr(i1 %c, ptr addrspace(3) %group.ptr.0) #0 {115  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr116  %select = select i1 %c, ptr %cast0, ptr addrspacecast (ptr addrspace(3) @lds1 to ptr)117  store i32 7, ptr %select118  ret void119}120 121; CHECK-LABEL: @store_select_group_flat_inttoptr_flat(122; CHECK: %select = select i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) addrspacecast (ptr inttoptr (i64 12345 to ptr) to ptr addrspace(3))123; CHECK: store i32 7, ptr addrspace(3) %select124define amdgpu_kernel void @store_select_group_flat_inttoptr_flat(i1 %c, ptr addrspace(3) %group.ptr.0) #0 {125  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr126  %select = select i1 %c, ptr %cast0, ptr inttoptr (i64 12345 to ptr)127  store i32 7, ptr %select128  ret void129}130 131; CHECK-LABEL: @store_select_group_flat_inttoptr_group(132; CHECK: %select = select i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) inttoptr (i32 400 to ptr addrspace(3))133; CHECK-NEXT: store i32 7, ptr addrspace(3) %select134define amdgpu_kernel void @store_select_group_flat_inttoptr_group(i1 %c, ptr addrspace(3) %group.ptr.0) #0 {135  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr136  %select = select i1 %c, ptr %cast0, ptr addrspacecast (ptr addrspace(3) inttoptr (i32 400 to ptr addrspace(3)) to ptr)137  store i32 7, ptr %select138  ret void139}140 141; CHECK-LABEL: @store_select_group_global_mismatch_flat_constexpr(142; CHECK: %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr143; CHECK: %select = select i1 %c, ptr %cast0, ptr addrspacecast (ptr addrspace(1) @global0 to ptr)144; CHECK: store i32 7, ptr %select145define amdgpu_kernel void @store_select_group_global_mismatch_flat_constexpr(i1 %c, ptr addrspace(3) %group.ptr.0) #0 {146  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr147  %select = select i1 %c, ptr %cast0, ptr addrspacecast (ptr addrspace(1) @global0 to ptr)148  store i32 7, ptr %select149  ret void150}151 152; CHECK-LABEL: @store_select_group_global_mismatch_flat_constexpr_swap(153; CHECK: %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr154; CHECK: %select = select i1 %c, ptr addrspacecast (ptr addrspace(1) @global0 to ptr), ptr %cast0155; CHECK: store i32 7, ptr %select156define amdgpu_kernel void @store_select_group_global_mismatch_flat_constexpr_swap(i1 %c, ptr addrspace(3) %group.ptr.0) #0 {157  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr158  %select = select i1 %c, ptr addrspacecast (ptr addrspace(1) @global0 to ptr), ptr %cast0159  store i32 7, ptr %select160  ret void161}162 163; CHECK-LABEL: @store_select_group_global_mismatch_null_null(164; CHECK: %select = select i1 %c, ptr addrspacecast (ptr addrspace(3) null to ptr), ptr addrspacecast (ptr addrspace(1) null to ptr)165; CHECK: store i32 7, ptr %select166define amdgpu_kernel void @store_select_group_global_mismatch_null_null(i1 %c) #0 {167  %select = select i1 %c, ptr addrspacecast (ptr addrspace(3) null to ptr), ptr addrspacecast (ptr addrspace(1) null to ptr)168  store i32 7, ptr %select169  ret void170}171 172@lds2 = external addrspace(3) global [1024 x i32], align 4173 174; CHECK-LABEL: @store_select_group_constexpr_ptrtoint(175; CHECK: %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr176; CHECK: %select = select i1 %c, ptr %cast0, ptr addrspacecast (ptr addrspace(1) inttoptr (i32 add (i32 ptrtoint (ptr addrspace(3) @lds2 to i32), i32 124) to ptr addrspace(1)) to ptr)177; CHECK: store i32 7, ptr %select178define amdgpu_kernel void @store_select_group_constexpr_ptrtoint(i1 %c, ptr addrspace(3) %group.ptr.0) #0 {179  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr180  %select = select i1 %c, ptr %cast0, ptr addrspacecast (ptr addrspace(1) inttoptr (i32 add (i32 ptrtoint (ptr addrspace(3) @lds2 to i32), i32 124) to ptr addrspace(1)) to ptr)181  store i32 7, ptr %select182  ret void183}184 185; CHECK-LABEL: @store_select_group_flat_vector(186; CHECK: %cast0 = addrspacecast <2 x ptr addrspace(3)> %group.ptr.0 to <2 x ptr>187; CHECK: %cast1 = addrspacecast <2 x ptr addrspace(3)> %group.ptr.1 to <2 x ptr>188; CHECK: %select = select i1 %c, <2 x ptr> %cast0, <2 x ptr> %cast1189; CHECK: %extract0 = extractelement <2 x ptr> %select, i32 0190; CHECK: %extract1 = extractelement <2 x ptr> %select, i32 1191; CHECK: store i32 -1, ptr %extract0192; CHECK: store i32 -2, ptr %extract1193define amdgpu_kernel void @store_select_group_flat_vector(i1 %c, <2 x ptr addrspace(3)> %group.ptr.0, <2 x ptr addrspace(3)> %group.ptr.1) #0 {194  %cast0 = addrspacecast <2 x ptr addrspace(3)> %group.ptr.0 to <2 x ptr>195  %cast1 = addrspacecast <2 x ptr addrspace(3)> %group.ptr.1 to <2 x ptr>196  %select = select i1 %c, <2 x ptr> %cast0, <2 x ptr> %cast1197  %extract0 = extractelement <2 x ptr> %select, i32 0198  %extract1 = extractelement <2 x ptr> %select, i32 1199  store i32 -1, ptr %extract0200  store i32 -2, ptr %extract1201  ret void202}203 204attributes #0 = { nounwind }205 206!0 = !{!"branch_weights", i32 2, i32 10}207