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