180 lines · plain
1; RUN: llc -mtriple=nvptx64 -stop-before=nvptx-proxyreg-erasure < %s 2>&1 \2; RUN: | llc -x mir -mtriple=nvptx64 -start-before=nvptx-proxyreg-erasure 2>&1 \3; RUN: | FileCheck %s --check-prefix=PTX --check-prefix=PTX-WITH4 5; RUN: llc -mtriple=nvptx64 -stop-before=nvptx-proxyreg-erasure < %s 2>&1 \6; RUN: | llc -x mir -mtriple=nvptx64 -start-after=nvptx-proxyreg-erasure 2>&1 \7; RUN: | FileCheck %s --check-prefix=PTX --check-prefix=PTX-WITHOUT8 9; Thorough testing of ProxyRegErasure: PTX assembly with and without the pass.10 11declare i1 @callee_i1()12define i1 @check_i1() {13 ; PTX-LABEL: check_i114 ; PTX-DAG: { // callseq {{[0-9]+}}, {{[0-9]+}}15 ; PTX-DAG: ld.param.b32 [[LD:%r[0-9]+]], [retval0];16 ; PTX-DAG: } // callseq {{[0-9]+}}17 18 ; PTX-WITHOUT-DAG: mov.b32 [[RES:%r[0-9]+]], [[LD]];19 ; PTX-WITHOUT-DAG: st.param.b32 [func_retval0], [[RES]];20 ; PTX-WITH-DAG: st.param.b32 [func_retval0], [[LD]];21 22 %ret = call i1 @callee_i1()23 ret i1 %ret24}25 26declare i16 @callee_i16()27define i16 @check_i16() {28 ; PTX-LABEL: check_i1629 ; PTX-DAG: { // callseq {{[0-9]+}}, {{[0-9]+}}30 ; PTX-DAG: ld.param.b32 [[LD:%r[0-9]+]], [retval0];31 ; PTX-DAG: } // callseq {{[0-9]+}}32 33 ; PTX-WITHOUT-DAG: mov.b32 [[RES:%r[0-9]+]], [[LD]];34 ; PTX-WITHOUT-DAG: st.param.b32 [func_retval0], [[RES]];35 ; PTX-WITH-DAG: st.param.b32 [func_retval0], [[LD]];36 37 %ret = call i16 @callee_i16()38 ret i16 %ret39}40 41declare i32 @callee_i32()42define i32 @check_i32() {43 ; PTX-LABEL: check_i3244 ; PTX-DAG: { // callseq {{[0-9]+}}, {{[0-9]+}}45 ; PTX-DAG: ld.param.b32 [[LD:%r[0-9]+]], [retval0];46 ; PTX-DAG: } // callseq {{[0-9]+}}47 48 ; PTX-WITHOUT-DAG: mov.b32 [[PROXY:%r[0-9]+]], [[LD]];49 ; PTX-WITHOUT-DAG: st.param.b32 [func_retval0], [[PROXY]];50 ; PTX-WITH-DAG: st.param.b32 [func_retval0], [[LD]];51 52 %ret = call i32 @callee_i32()53 ret i32 %ret54}55 56declare i64 @callee_i64()57define i64 @check_i64() {58 ; PTX-LABEL: check_i6459 ; PTX-DAG: { // callseq {{[0-9]+}}, {{[0-9]+}}60 ; PTX-DAG: ld.param.b64 [[LD:%rd[0-9]+]], [retval0];61 ; PTX-DAG: } // callseq {{[0-9]+}}62 63 ; PTX-WITHOUT-DAG: mov.b64 [[PROXY:%rd[0-9]+]], [[LD]];64 ; PTX-WITHOUT-DAG: st.param.b64 [func_retval0], [[PROXY]];65 ; PTX-WITH-DAG: st.param.b64 [func_retval0], [[LD]];66 67 %ret = call i64 @callee_i64()68 ret i64 %ret69}70 71declare i128 @callee_i128()72define i128 @check_i128() {73 ; PTX-LABEL: check_i12874 ; PTX-DAG: { // callseq {{[0-9]+}}, {{[0-9]+}}75 ; PTX-DAG: ld.param.v2.b64 {[[LD0:%rd[0-9]+]], [[LD1:%rd[0-9]+]]}, [retval0];76 ; PTX-DAG: } // callseq {{[0-9]+}}77 78 ; PTX-WITHOUT-DAG: mov.b64 [[PROXY0:%rd[0-9]+]], [[LD0]];79 ; PTX-WITHOUT-DAG: mov.b64 [[PROXY1:%rd[0-9]+]], [[LD1]];80 ; PTX-WITHOUT-DAG: st.param.v2.b64 [func_retval0], {[[PROXY0]], [[PROXY1]]};81 ; PTX-WITH-DAG: st.param.v2.b64 [func_retval0], {[[LD0]], [[LD1]]};82 83 %ret = call i128 @callee_i128()84 ret i128 %ret85}86 87declare half @callee_f16()88define half @check_f16() {89 ; PTX-LABEL: check_f1690 ; PTX-DAG: { // callseq {{[0-9]+}}, {{[0-9]+}}91 ; PTX-DAG: ld.param.b16 [[LD:%rs[0-9]+]], [retval0];92 ; PTX-DAG: } // callseq {{[0-9]+}}93 94 ; PTX-WITHOUT-DAG: mov.b16 [[PROXY:%rs[0-9]+]], [[LD]];95 ; PTX-WITHOUT-DAG: st.param.b16 [func_retval0], [[PROXY]];96 ; PTX-WITH-DAG: st.param.b16 [func_retval0], [[LD]];97 98 %ret = call half @callee_f16()99 ret half %ret100}101 102declare float @callee_f32()103define float @check_f32() {104 ; PTX-LABEL: check_f32105 ; PTX-DAG: { // callseq {{[0-9]+}}, {{[0-9]+}}106 ; PTX-DAG: ld.param.b32 [[LD:%r[0-9]+]], [retval0];107 ; PTX-DAG: } // callseq {{[0-9]+}}108 109 ; PTX-WITHOUT-DAG: mov.b32 [[PROXY:%r[0-9]+]], [[LD]];110 ; PTX-WITHOUT-DAG: st.param.b32 [func_retval0], [[PROXY]];111 ; PTX-WITH-DAG: st.param.b32 [func_retval0], [[LD]];112 113 %ret = call float @callee_f32()114 ret float %ret115}116 117declare double @callee_f64()118define double @check_f64() {119 ; PTX-LABEL: check_f64120 ; PTX-DAG: { // callseq {{[0-9]+}}, {{[0-9]+}}121 ; PTX-DAG: ld.param.b64 [[LD:%rd[0-9]+]], [retval0];122 ; PTX-DAG: } // callseq {{[0-9]+}}123 124 ; PTX-WITHOUT-DAG: mov.b64 [[PROXY:%rd[0-9]+]], [[LD]];125 ; PTX-WITHOUT-DAG: st.param.b64 [func_retval0], [[PROXY]];126 ; PTX-WITH-DAG: st.param.b64 [func_retval0], [[LD]];127 128 %ret = call double @callee_f64()129 ret double %ret130}131 132declare <4 x i32> @callee_vec_i32()133define <4 x i32> @check_vec_i32() {134 ; PTX-LABEL: check_vec_i32135 ; PTX-DAG: { // callseq {{[0-9]+}}, {{[0-9]+}}136 ; PTX-DAG: ld.param.v4.b32 {[[LD0:%r[0-9]+]], [[LD1:%r[0-9]+]], [[LD2:%r[0-9]+]], [[LD3:%r[0-9]+]]}, [retval0];137 ; PTX-DAG: } // callseq {{[0-9]+}}138 139 ; PTX-WITHOUT-DAG: mov.b32 [[PROXY0:%r[0-9]+]], [[LD0]];140 ; PTX-WITHOUT-DAG: mov.b32 [[PROXY1:%r[0-9]+]], [[LD1]];141 ; PTX-WITHOUT-DAG: mov.b32 [[PROXY2:%r[0-9]+]], [[LD2]];142 ; PTX-WITHOUT-DAG: mov.b32 [[PROXY3:%r[0-9]+]], [[LD3]];143 ; PTX-WITHOUT-DAG: st.param.v4.b32 [func_retval0], {[[PROXY0]], [[PROXY1]], [[PROXY2]], [[PROXY3]]};144 ; PTX-WITH-DAG: st.param.v4.b32 [func_retval0], {[[LD0]], [[LD1]], [[LD2]], [[LD3]]};145 146 %ret = call <4 x i32> @callee_vec_i32()147 ret <4 x i32> %ret148}149 150declare <2 x half> @callee_vec_f16()151define <2 x half> @check_vec_f16() {152 ; PTX-LABEL: check_vec_f16153 ; PTX-DAG: { // callseq {{[0-9]+}}, {{[0-9]+}}154 ; PTX-DAG: ld.param.b32 [[LD:%r[0-9]+]], [retval0];155 ; PTX-DAG: } // callseq {{[0-9]+}}156 157 ; PTX-WITHOUT-DAG: mov.b32 [[PROXY:%r[0-9]+]], [[LD]];158 ; PTX-WITHOUT-DAG: st.param.b32 [func_retval0], [[PROXY]];159 ; PTX-WITH-DAG: st.param.b32 [func_retval0], [[LD]];160 161 %ret = call <2 x half> @callee_vec_f16()162 ret <2 x half> %ret163}164 165declare <2 x double> @callee_vec_f64()166define <2 x double> @check_vec_f64() {167 ; PTX-LABEL: check_vec_f64168 ; PTX-DAG: { // callseq {{[0-9]+}}, {{[0-9]+}}169 ; PTX-DAG: ld.param.v2.b64 {[[LD0:%rd[0-9]+]], [[LD1:%rd[0-9]+]]}, [retval0];170 ; PTX-DAG: } // callseq {{[0-9]+}}171 172 ; PTX-WITHOUT-DAG: mov.b64 [[PROXY0:%rd[0-9]+]], [[LD0]];173 ; PTX-WITHOUT-DAG: mov.b64 [[PROXY1:%rd[0-9]+]], [[LD1]];174 ; PTX-WITHOUT-DAG: st.param.v2.b64 [func_retval0], {[[PROXY0]], [[PROXY1]]};175 ; PTX-WITH-DAG: st.param.v2.b64 [func_retval0], {[[LD0]], [[LD1]]};176 177 %ret = call <2 x double> @callee_vec_f64()178 ret <2 x double> %ret179}180