brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.8 KiB · 4224c1c Raw
167 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2; RUN: llc -mtriple=aarch64 -global-isel -stop-after=irtranslator -verify-machineinstrs -o - %s | FileCheck %s3 4; Verify that we generate G_ASSERT_SEXT for signext parameters.5 6define i8 @signext_param_i8(i8 signext %x) {7  ; CHECK-LABEL: name: signext_param_i88  ; CHECK: bb.1 (%ir-block.0):9  ; CHECK-NEXT:   liveins: $w010  ; CHECK-NEXT: {{  $}}11  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w012  ; CHECK-NEXT:   [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY]], 813  ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_SEXT]](s32)14  ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)15  ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)16  ; CHECK-NEXT:   RET_ReallyLR implicit $w017  ret i8 %x18}19 20define i8 @no_signext_param(i8 %x) {21  ; CHECK-LABEL: name: no_signext_param22  ; CHECK: bb.1 (%ir-block.0):23  ; CHECK-NEXT:   liveins: $w024  ; CHECK-NEXT: {{  $}}25  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w026  ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)27  ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)28  ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)29  ; CHECK-NEXT:   RET_ReallyLR implicit $w030  ret i8 %x31}32 33; Don't need G_ASSERT_SEXT here. The sizes match.34define i32 @signext_param_i32(i32 signext %x) {35  ; CHECK-LABEL: name: signext_param_i3236  ; CHECK: bb.1 (%ir-block.0):37  ; CHECK-NEXT:   liveins: $w038  ; CHECK-NEXT: {{  $}}39  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w040  ; CHECK-NEXT:   $w0 = COPY [[COPY]](s32)41  ; CHECK-NEXT:   RET_ReallyLR implicit $w042  ret i32 %x43}44 45; signext param is passed on the stack. We should still get a G_ASSERT_SEXT.46define i32 @signext_param_stack(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f,47  ; CHECK-LABEL: name: signext_param_stack48  ; CHECK: bb.1 (%ir-block.0):49  ; CHECK-NEXT:   liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x750  ; CHECK-NEXT: {{  $}}51  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x052  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x153  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x254  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x355  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x456  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x557  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x658  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x759  ; CHECK-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.160  ; CHECK-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s64) from %fixed-stack.1, align 16)61  ; CHECK-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.062  ; CHECK-NEXT:   [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[FRAME_INDEX1]](p0) :: (invariant load (s8) from %fixed-stack.0, align 8)63  ; CHECK-NEXT:   [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[SEXTLOAD]], 164  ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ASSERT_SEXT]](s32)65  ; CHECK-NEXT:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s1)66  ; CHECK-NEXT:   $w0 = COPY [[ZEXT]](s32)67  ; CHECK-NEXT:   RET_ReallyLR implicit $w068                                i64 %g, i64 %h, i64 %i, i1 signext %j) {69  %v = zext i1 %j to i3270  ret i32 %v71}72 73; The signext parameter is a s32, so there's no extension required.74define i32 @dont_need_assert_zext_stack(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e,75  ; CHECK-LABEL: name: dont_need_assert_zext_stack76  ; CHECK: bb.1 (%ir-block.0):77  ; CHECK-NEXT:   liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x778  ; CHECK-NEXT: {{  $}}79  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x080  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x181  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x282  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x383  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x484  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x585  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x686  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x787  ; CHECK-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.188  ; CHECK-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s64) from %fixed-stack.1, align 16)89  ; CHECK-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.090  ; CHECK-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s32) from %fixed-stack.0, align 8)91  ; CHECK-NEXT:   $w0 = COPY [[LOAD1]](s32)92  ; CHECK-NEXT:   RET_ReallyLR implicit $w093                                        i64 %f, i64 %g, i64 %h, i64 %i,94                                        i32 signext %j) {95  ret i32 %j96}97 98; s8 requires extension to s32, so we should get a G_ASSERT_SEXT here.99define i8 @s8_assert_zext_stack(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e,100  ; CHECK-LABEL: name: s8_assert_zext_stack101  ; CHECK: bb.1 (%ir-block.0):102  ; CHECK-NEXT:   liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7103  ; CHECK-NEXT: {{  $}}104  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x0105  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x1106  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x2107  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x3108  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x4109  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x5110  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x6111  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x7112  ; CHECK-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1113  ; CHECK-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s64) from %fixed-stack.1, align 16)114  ; CHECK-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0115  ; CHECK-NEXT:   [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[FRAME_INDEX1]](p0) :: (invariant load (s8) from %fixed-stack.0, align 8)116  ; CHECK-NEXT:   [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[SEXTLOAD]], 8117  ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_SEXT]](s32)118  ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)119  ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)120  ; CHECK-NEXT:   RET_ReallyLR implicit $w0121                                        i64 %f, i64 %g, i64 %h, i64 %i,122                                        i8 signext %j) {123  ret i8 %j124}125 126define i32 @callee_signext_i1(i1 signext %0) {127  ; CHECK-LABEL: name: callee_signext_i1128  ; CHECK: bb.1 (%ir-block.1):129  ; CHECK-NEXT:   liveins: $w0130  ; CHECK-NEXT: {{  $}}131  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0132  ; CHECK-NEXT:   [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY]], 1133  ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ASSERT_SEXT]](s32)134  ; CHECK-NEXT:   [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s1)135  ; CHECK-NEXT:   $w0 = COPY [[SEXT]](s32)136  ; CHECK-NEXT:   RET_ReallyLR implicit $w0137  %r = sext i1 %0 to i32138  ret i32 %r139}140 141define i32 @caller_signext_i1() {142  ; CHECK-LABEL: name: caller_signext_i1143  ; CHECK: bb.1 (%ir-block.0):144  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true145  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp146  ; CHECK-NEXT:   [[SEXT:%[0-9]+]]:_(s8) = G_SEXT [[C]](s1)147  ; CHECK-NEXT:   [[SEXT1:%[0-9]+]]:_(s32) = G_SEXT [[SEXT]](s8)148  ; CHECK-NEXT:   $w0 = COPY [[SEXT1]](s32)149  ; CHECK-NEXT:   BL @callee_signext_i1, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $w0, implicit-def $w0150  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp151  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0152  ; CHECK-NEXT:   $w0 = COPY [[COPY]](s32)153  ; CHECK-NEXT:   RET_ReallyLR implicit $w0154  %r = call i32 @callee_signext_i1(i1 signext true)155  ret i32 %r156}157 158define signext i1 @ret_signext_i1() {159  ; CHECK-LABEL: name: ret_signext_i1160  ; CHECK: bb.1 (%ir-block.0):161  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true162  ; CHECK-NEXT:   [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[C]](s1)163  ; CHECK-NEXT:   $w0 = COPY [[SEXT]](s32)164  ; CHECK-NEXT:   RET_ReallyLR implicit $w0165  ret i1 true166}167