214 lines · plain
1; RUN: llc -mtriple=m68k -global-isel -stop-after=irtranslator < %s | FileCheck %s2 3 4; CHECK: name: noArgRetVoid5; CHECK: RTS6define void @noArgRetVoid() {7 ret void8}9 10%struct.A = type { i8, float, i32, i32, i32 }11 12define void @test_arg_lowering1(i8 %x, i8 %y) {13 ; CHECK-LABEL: name: test_arg_lowering114 ; CHECK: bb.1 (%ir-block.0):15 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX16 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I1]](p0)17 ; CHECK: [[G_TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[G_LOAD1]](s32)18 ; CHECK: [[G_F_I2:%[0-9]+]]:_(p0) = G_FRAME_INDEX19 ; CHECK: [[G_LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I2]](p0)20 ; CHECK: [[G_TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[G_LOAD2]](s32)21 ; CHECK: RTS22 ret void23}24 25define void @test_arg_lowering2(i16 %x, i16 %y) {26 ; CHECK-LABEL: name: test_arg_lowering227 ; CHECK: bb.1 (%ir-block.0):28 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX29 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I1]](p0)30 ; CHECK: [[G_TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[G_LOAD1]](s32)31 ; CHECK: [[G_F_I2:%[0-9]+]]:_(p0) = G_FRAME_INDEX32 ; CHECK: [[G_LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I2]](p0)33 ; CHECK: [[G_TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[G_LOAD2]](s32)34 ; CHECK: RTS35 ret void36}37 38define void @test_arg_lowering3(i32 %x, i32 %y) {39 ; CHECK-LABEL: name: test_arg_lowering340 ; CHECK: bb.1 (%ir-block.0):41 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX42 ; CHECK: {{%.*}} G_LOAD [[G_F_I1]](p0)43 ; CHECK: [[G_F_I2:%[0-9]+]]:_(p0) = G_FRAME_INDEX44 ; CHECK: {{%.*}} G_LOAD [[G_F_I2]](p0)45 ; CHECK: RTS46 ret void47}48 49define void @test_arg_lowering_vector(<5 x i8> %x) {50 ; CHECK-LABEL: name: test_arg_lowering_vector51 ; CHECK: bb.1 (%ir-block.0):52 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX53 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I1]](p0)54 ; CHECK: [[G_F_I2:%[0-9]+]]:_(p0) = G_FRAME_INDEX55 ; CHECK: [[G_LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I2]](p0)56 ; CHECK: [[G_F_I3:%[0-9]+]]:_(p0) = G_FRAME_INDEX57 ; CHECK: [[G_LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I3]](p0)58 ; CHECK: [[G_F_I4:%[0-9]+]]:_(p0) = G_FRAME_INDEX59 ; CHECK: [[G_LOAD4:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I4]](p0)60 ; CHECK: [[G_F_I5:%[0-9]+]]:_(p0) = G_FRAME_INDEX61 ; CHECK: [[G_LOAD5:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I5]](p0)62 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<5 x s32>) = G_BUILD_VECTOR [[G_LOAD1]](s32), [[G_LOAD2]](s32), [[G_LOAD3]](s32), [[G_LOAD4]](s32), [[G_LOAD5]](s32)63 ; CHECK: [[G_TRUNC:%[0-9]+]]:_(<5 x s8>) = G_TRUNC [[BUILD_VECTOR]](<5 x s32>)64 ; CHECK: RTS65 ret void66}67 68define void @test_arg_lowering_array([5 x i8] %x) {69 ; CHECK-LABEL: name: test_arg_lowering_array70 ; CHECK: bb.1 (%ir-block.0):71 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX72 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I1]](p0)73 ; CHECK: [[G_TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[G_LOAD1]](s32)74 ; CHECK: [[G_F_I2:%[0-9]+]]:_(p0) = G_FRAME_INDEX75 ; CHECK: [[G_LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I2]](p0)76 ; CHECK: [[G_TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[G_LOAD2]](s32)77 ; CHECK: [[G_F_I3:%[0-9]+]]:_(p0) = G_FRAME_INDEX78 ; CHECK: [[G_LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I3]](p0)79 ; CHECK: [[G_TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[G_LOAD3]](s32)80 ; CHECK: [[G_F_I4:%[0-9]+]]:_(p0) = G_FRAME_INDEX81 ; CHECK: [[G_LOAD4:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I4]](p0)82 ; CHECK: [[G_TRUNC4:%[0-9]+]]:_(s8) = G_TRUNC [[G_LOAD4]](s32)83 ; CHECK: [[G_F_I5:%[0-9]+]]:_(p0) = G_FRAME_INDEX84 ; CHECK: [[G_LOAD5:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I5]](p0)85 ; CHECK: [[G_TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[G_LOAD5]](s32)86 ; CHECK: RTS87 ret void88}89 90define void @test_arg_lowering_double(double %x) {91 ; CHECK-LABEL: name: test_arg_lowering_double92 ; CHECK: bb.1 (%ir-block.0):93 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX94 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I1]](p0)95 ; CHECK: [[G_F_I2:%[0-9]+]]:_(p0) = G_FRAME_INDEX96 ; CHECK: [[G_LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I2]](p0)97 ; CHECK: [[G_MERGE_VAL:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[G_LOAD1]](s32), [[G_LOAD2]](s32)98 ; CHECK: RTS99 ret void100}101 102define void @test_arg_lowering_float(float %x) {103 ; CHECK-LABEL: name: test_arg_lowering_float104 ; CHECK: bb.1 (%ir-block.0):105 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX106 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I1]](p0)107 ; CHECK: RTS108 ret void109}110 111define void @test_arg_lowering_multiple(i1 %a, i8 %b, i16 %c, i32 %d, i64 %e, i128 %f){112 ; CHECK-LABEL: name: test_arg_lowering_multiple113 ; CHECK: bb.1 (%ir-block.0):114 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX115 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I1]](p0)116 ; CHECK: [[G_TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[G_LOAD1]](s32)117 ; CHECK: [[G_F_I2:%[0-9]+]]:_(p0) = G_FRAME_INDEX118 ; CHECK: [[G_LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I2]](p0)119 ; CHECK: [[G_TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[G_LOAD2]](s32)120 ; CHECK: [[G_F_I3:%[0-9]+]]:_(p0) = G_FRAME_INDEX121 ; CHECK: [[G_LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I3]](p0)122 ; CHECK: [[G_TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[G_LOAD3]](s32)123 ; CHECK: [[G_F_I4:%[0-9]+]]:_(p0) = G_FRAME_INDEX124 ; CHECK: [[G_LOAD4:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I4]](p0)125 ; CHECK: [[G_F_I5:%[0-9]+]]:_(p0) = G_FRAME_INDEX126 ; CHECK: [[G_LOAD5:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I5]](p0)127 ; CHECK: [[G_F_I6:%[0-9]+]]:_(p0) = G_FRAME_INDEX128 ; CHECK: [[G_LOAD6:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I6]](p0)129 ; CHECK: [[G_MERGE_VAL:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[G_LOAD5]](s32), [[G_LOAD6]](s32)130 ; CHECK: [[G_F_I7:%[0-9]+]]:_(p0) = G_FRAME_INDEX131 ; CHECK: [[G_LOAD7:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I7]](p0)132 ; CHECK: [[G_F_I8:%[0-9]+]]:_(p0) = G_FRAME_INDEX133 ; CHECK: [[G_LOAD8:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I8]](p0)134 ; CHECK: [[G_F_I9:%[0-9]+]]:_(p0) = G_FRAME_INDEX135 ; CHECK: [[G_LOAD9:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I9]](p0)136 ; CHECK: [[G_F_I10:%[0-9]+]]:_(p0) = G_FRAME_INDEX137 ; CHECK: [[G_LOAD10:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I10]](p0)138 ; CHECK: [[G_MERGE_VAL:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[G_LOAD7]](s32), [[G_LOAD8]](s32), [[G_LOAD9]](s32), [[G_LOAD10]](s32)139 ; CHECK: RTS140 ret void141}142 143define void @test_arg_lowering_ptr(ptr %x) {144 ; CHECK-LABEL: name: test_arg_lowering_ptr145 ; CHECK: bb.1 (%ir-block.0):146 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX147 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(p0) = G_LOAD [[G_F_I1]](p0)148 ; CHECK: RTS149 ret void150}151 152define void @test_arg_lowering_float_ptr(ptr %x) {153 ; CHECK-LABEL: name: test_arg_lowering_float_ptr154 ; CHECK: bb.1 (%ir-block.0):155 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX156 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(p0) = G_LOAD [[G_F_I1]](p0)157 ; CHECK: RTS158 ret void159}160 161define void @test_arg_lowering_struct(%struct.A %a) #0 {162 ; CHECK-LABEL: name: test_arg_lowering_struct163 ; CHECK: bb.1 (%ir-block.0):164 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX165 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I1]](p0)166 ; CHECK: [[G_TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[G_LOAD1]](s32)167 ; CHECK: [[G_F_I2:%[0-9]+]]:_(p0) = G_FRAME_INDEX168 ; CHECK: [[G_LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I2]](p0)169 ; CHECK: [[G_F_I3:%[0-9]+]]:_(p0) = G_FRAME_INDEX170 ; CHECK: [[G_LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I3]](p0)171 ; CHECK: [[G_F_I4:%[0-9]+]]:_(p0) = G_FRAME_INDEX172 ; CHECK: [[G_LOAD4:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I4]](p0)173 ; CHECK: [[G_F_I5:%[0-9]+]]:_(p0) = G_FRAME_INDEX174 ; CHECK: [[G_LOAD5:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I5]](p0)175 ; CHECK: RTS176 ret void177}178 179define i8 @test_ret1(i8 %a) {180 ; CHECK-LABEL: name: test_ret1181 ; CHECK: bb.1 (%ir-block.0):182 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX183 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I1]](p0)184 ; CHECK: [[G_TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[G_LOAD1]](s32)185 ; CHECK: $bd0 = COPY [[G_TRUNC1]](s8)186 ; CHECK: RTS implicit $bd0187 ret i8 %a188}189 190define i32 @test_ret2(i32 %a) {191 ; CHECK-LABEL: name: test_ret2192 ; CHECK: bb.1 (%ir-block.0):193 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX194 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I1]](p0)195 ; CHECK: $d0 = COPY [[G_LOAD1]](s32)196 ; CHECK: RTS implicit $d0197 ret i32 %a198}199 200define i64 @test_ret3(i64 %a) {201 ; CHECK-LABEL: name: test_ret3202 ; CHECK: bb.1 (%ir-block.0):203 ; CHECK: [[G_F_I1:%[0-9]+]]:_(p0) = G_FRAME_INDEX204 ; CHECK: [[G_LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I1]](p0)205 ; CHECK: [[G_F_I2:%[0-9]+]]:_(p0) = G_FRAME_INDEX206 ; CHECK: [[G_LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[G_F_I2]](p0)207 ; CHECK: [[G_MERGE_VAL:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[G_LOAD1]](s32), [[G_LOAD2]](s32)208 ; CHECK: [[G_UNMERGE_VAL1:%[0-9]+]]:_(s32), [[G_UNMERGE_VAL2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[G_MERGE_VAL]](s64)209 ; CHECK: $d1 = COPY [[G_UNMERGE_VAL1]](s32)210 ; CHECK: $d0 = COPY [[G_UNMERGE_VAL2]](s32)211 ; CHECK: RTS implicit $d1, implicit $d0212 ret i64 %a213}214