brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 5a3a8b9 Raw
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