brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · a7f3103 Raw
182 lines · plain
1; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_52 -mattr=+ptx64 -O0 | FileCheck %s --check-prefixes=SM_52,COMMON2; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_70 -mattr=+ptx64 -O0 | FileCheck %s --check-prefixes=SM_70,COMMON3; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_90 -mattr=+ptx72 -O0 | FileCheck %s --check-prefixes=SM_90,COMMON4 5@.str = private unnamed_addr constant [12 x i8] c"__CUDA_ARCH\00"6@.str1 = constant [11 x i8] c"__CUDA_FTZ\00"7 8declare i32 @__nvvm_reflect(ptr)9 10; COMMON-LABEL: .visible .func  (.param .b32 func_retval0) foo()11; SM_52: st.param.b32    [func_retval0], 3;12; SM_70: st.param.b32    [func_retval0], 2;13; SM_90: st.param.b32    [func_retval0], 1;14; COMMON-NEXT: ret;15 16define i32 @foo() {17entry:18  %call = call i32 @__nvvm_reflect(ptr @.str)19  %cmp = icmp uge i32 %call, 90020  br i1 %cmp, label %if.then, label %if.else21 22if.then:23  br label %return24 25if.else:26  %call1 = call i32 @__nvvm_reflect(ptr @.str)27  %cmp2 = icmp uge i32 %call1, 70028  br i1 %cmp2, label %if.then3, label %if.else429 30if.then3:31  br label %return32 33if.else4:34  %call5 = call i32 @__nvvm_reflect(ptr @.str)35  %cmp6 = icmp uge i32 %call5, 52036  br i1 %cmp6, label %if.then7, label %if.else837 38if.then7:39  br label %return40 41if.else8:42  br label %return43 44return:45  %retval.0 = phi i32 [ 1, %if.then ], [ 2, %if.then3 ], [ 3, %if.then7 ], [ 4, %if.else8 ]46  ret i32 %retval.047}48 49; COMMON-LABEL: .visible .func  (.param .b32 func_retval0) bar()50; SM_52: st.param.b32    [func_retval0], 2;51; SM_70: st.param.b32    [func_retval0], 1;52; SM_90: st.param.b32    [func_retval0], 1;53; COMMON-NEXT: ret;54define i32 @bar() {55entry:56  %call = call i32 @__nvvm_reflect(ptr @.str)57  %cmp = icmp uge i32 %call, 70058  br i1 %cmp, label %if.then, label %if.else59 60if.then:61  br label %if.end62 63if.else:64  br label %if.end65 66if.end:67  %x = phi i32 [ 1, %if.then ], [ 2, %if.else ]68  ret i32 %x69}70 71; SM_52-NOT: valid;72; SM_70: valid;73; SM_90: valid;74define void @baz() {75entry:76  %call = call i32 @__nvvm_reflect(ptr @.str)77  %cmp = icmp uge i32 %call, 70078  br i1 %cmp, label %if.then, label %if.end79 80if.then:81  call void asm sideeffect "valid;\0A", ""()82  br label %if.end83 84if.end:85  ret void86}87 88; SM_52: .visible .func  (.param .b32 func_retval0) qux()89; SM_52: st.param.b32    [func_retval0], 3;90; SM_70: st.param.b32    [func_retval0], 2;91; SM_90: st.param.b32    [func_retval0], 1;92; COMMON-NEXT: ret;93define i32 @qux() {94entry:95  %call = call i32 @__nvvm_reflect(ptr noundef @.str)96  switch i32 %call, label %sw.default [97    i32 900, label %sw.bb98    i32 700, label %sw.bb199    i32 520, label %sw.bb2100  ]101 102sw.bb:103  br label %return104 105sw.bb1:106  br label %return107 108sw.bb2:109  br label %return110 111sw.default:112  br label %return113 114return:115  %retval = phi i32 [ 4, %sw.default ], [ 3, %sw.bb2 ], [ 2, %sw.bb1 ], [ 1, %sw.bb ]116  ret i32 %retval117}118 119; COMMON-LABEL: .visible .func  (.param .b32 func_retval0) phi()120; COMMON: st.param.b32    [func_retval0], 0;121; COMMON-NEXT: ret;122define float @phi() {123entry:124  %0 = call i32 @__nvvm_reflect(ptr @.str)125  %1 = icmp eq i32 %0, 0126  br i1 %1, label %if.then, label %if.else127 128if.then:129  br label %if.else130 131if.else:132  %.08 = phi float [ 0.000000e+00, %if.then ], [ 1.000000e+00, %entry ]133  %4 = fcmp ogt float %.08, 0.000000e+00134  br i1 %4, label %exit, label %if.exit135 136if.exit:137  br label %exit138 139exit:140  ret float 0.000000e+00141}142 143; COMMON-LABEL: .visible .func  (.param .b32 func_retval0) prop()144; SM_52: st.param.b32    [func_retval0], 3;145; SM_70: st.param.b32    [func_retval0], 2;146; SM_90: st.param.b32    [func_retval0], 1;147; COMMON-NEXT: ret;148define i32 @prop() {149entry:150  %call = call i32 @__nvvm_reflect(ptr @.str)151  %conv = zext i32 %call to i64152  %div = udiv i64 %conv, 100153  %cmp = icmp eq i64 %div, 9154  br i1 %cmp, label %if.then, label %if.else155 156if.then:157  br label %return158 159if.else:160  %div2 = udiv i64 %conv, 100161  %cmp3 = icmp eq i64 %div2, 7162  br i1 %cmp3, label %if.then5, label %if.else6163 164if.then5:165  br label %return166 167if.else6:168  %div7 = udiv i64 %conv, 100169  %cmp8 = icmp eq i64 %div7, 5170  br i1 %cmp8, label %if.then10, label %if.else11171 172if.then10:173  br label %return174 175if.else11:176  br label %return177 178return:179  %retval = phi i32 [ 1, %if.then ], [ 2, %if.then5 ], [ 3, %if.then10 ], [ 4, %if.else11 ]180  ret i32 %retval181}182