58 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -mtriple=nvptx64-nvidia-cuda -passes='require<domtree>,infer-address-spaces' %s | FileCheck %s3 4;;; Handle write corner case for infer-address-spaces with phi-nodes. The5;;; verifier will crash if we insert `addrspacecast` before phi-node.6 7declare void @llvm.assume(i1 noundef)8declare i1 @llvm.nvvm.isspacep.shared(ptr)9declare i1 @llvm.nvvm.isspacep.global(ptr)10 11define void @phinode_instr() {12; CHECK-LABEL: @phinode_instr(13; CHECK-NEXT: entry:14; CHECK-NEXT: [[PTR_1:%.*]] = load ptr, ptr null, align 815; CHECK-NEXT: [[TMP0:%.*]] = addrspacecast ptr [[PTR_1]] to ptr addrspace(3)16; CHECK-NEXT: [[BOOL_1:%.*]] = tail call i1 @llvm.nvvm.isspacep.shared(ptr [[PTR_1]])17; CHECK-NEXT: tail call void @llvm.assume(i1 [[BOOL_1]])18; CHECK-NEXT: br label [[IF_SINK_SPLIT:%.*]]19; CHECK: if.sink.split:20; CHECK-NEXT: [[PTR_SINK:%.*]] = phi ptr addrspace(3) [ [[TMP0]], [[ENTRY:%.*]] ]21; CHECK-NEXT: store i32 1, ptr addrspace(3) [[PTR_SINK]], align 422; CHECK-NEXT: ret void23;24entry:25 %ptr.1 = load ptr, ptr null, align 826 %bool.1 = tail call i1 @llvm.nvvm.isspacep.shared(ptr %ptr.1)27 tail call void @llvm.assume(i1 %bool.1)28 br label %if.sink.split29 30if.sink.split: ; preds = %entry31 %ptr.sink = phi ptr [ %ptr.1, %entry ]32 store i32 1, ptr %ptr.sink, align 433 ret void34}35 36define void @phinode_argument(ptr %lhs_ptr) {37; CHECK-LABEL: @phinode_argument(38; CHECK-NEXT: entry:39; CHECK-NEXT: [[TMP0:%.*]] = addrspacecast ptr [[LHS_PTR:%.*]] to ptr addrspace(1)40; CHECK-NEXT: [[BOOL_1:%.*]] = tail call i1 @llvm.nvvm.isspacep.global(ptr [[LHS_PTR]])41; CHECK-NEXT: tail call void @llvm.assume(i1 [[BOOL_1]])42; CHECK-NEXT: br label [[IF_SINK_SPLIT:%.*]]43; CHECK: if.sink.split:44; CHECK-NEXT: [[PTR_SINK:%.*]] = phi ptr addrspace(1) [ [[TMP0]], [[ENTRY:%.*]] ]45; CHECK-NEXT: store i32 1, ptr addrspace(1) [[PTR_SINK]], align 446; CHECK-NEXT: ret void47;48entry:49 %bool.1 = tail call i1 @llvm.nvvm.isspacep.global(ptr %lhs_ptr)50 tail call void @llvm.assume(i1 %bool.1)51 br label %if.sink.split52 53if.sink.split: ; preds = %entry54 %ptr.sink = phi ptr [ %lhs_ptr, %entry ]55 store i32 1, ptr %ptr.sink, align 456 ret void57}58