91 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2; RUN: llc -O0 -mtriple=aarch64-linux-gnu -global-isel -stop-after=irtranslator %s -o - | FileCheck %s3 4define i32 @call_trunc_no_flags(i64 %a) {5 ; CHECK-LABEL: name: call_trunc_no_flags6 ; CHECK: bb.1.entry:7 ; CHECK-NEXT: liveins: $x08 ; CHECK-NEXT: {{ $}}9 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x010 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)11 ; CHECK-NEXT: $w0 = COPY [[TRUNC]](s32)12 ; CHECK-NEXT: RET_ReallyLR implicit $w013entry:14 %result = trunc i64 %a to i3215 ret i32 %result16}17 18define i32 @call_trunc_nsw_flags(i64 %a) {19 ; CHECK-LABEL: name: call_trunc_nsw_flags20 ; CHECK: bb.1.entry:21 ; CHECK-NEXT: liveins: $x022 ; CHECK-NEXT: {{ $}}23 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x024 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = nsw G_TRUNC [[COPY]](s64)25 ; CHECK-NEXT: $w0 = COPY [[TRUNC]](s32)26 ; CHECK-NEXT: RET_ReallyLR implicit $w027entry:28 %result = trunc nsw i64 %a to i3229 ret i32 %result30}31 32define i32 @call_trunc_nuw_flags(i64 %a) {33 ; CHECK-LABEL: name: call_trunc_nuw_flags34 ; CHECK: bb.1.entry:35 ; CHECK-NEXT: liveins: $x036 ; CHECK-NEXT: {{ $}}37 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x038 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = nuw G_TRUNC [[COPY]](s64)39 ; CHECK-NEXT: $w0 = COPY [[TRUNC]](s32)40 ; CHECK-NEXT: RET_ReallyLR implicit $w041entry:42 %result = trunc nuw i64 %a to i3243 ret i32 %result44}45 46define i32 @call_trunc_all_flags(i64 %a) {47 ; CHECK-LABEL: name: call_trunc_all_flags48 ; CHECK: bb.1.entry:49 ; CHECK-NEXT: liveins: $x050 ; CHECK-NEXT: {{ $}}51 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x052 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = nuw nsw G_TRUNC [[COPY]](s64)53 ; CHECK-NEXT: $w0 = COPY [[TRUNC]](s32)54 ; CHECK-NEXT: RET_ReallyLR implicit $w055entry:56 %result = trunc nsw nuw i64 %a to i3257 ret i32 %result58}59 60define <2 x i64> @call_trunc_noop_signed_vector(<2 x i64> %a) {61 ; CHECK-LABEL: name: call_trunc_noop_signed_vector62 ; CHECK: bb.1.entry:63 ; CHECK-NEXT: liveins: $q064 ; CHECK-NEXT: {{ $}}65 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q066 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<2 x s32>) = nsw G_TRUNC [[COPY]](<2 x s64>)67 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(<2 x s64>) = G_SEXT [[TRUNC]](<2 x s32>)68 ; CHECK-NEXT: $q0 = COPY [[SEXT]](<2 x s64>)69 ; CHECK-NEXT: RET_ReallyLR implicit $q070entry:71 %truncate = trunc nsw <2 x i64> %a to <2 x i32>72 %result = sext <2 x i32> %truncate to <2 x i64>73 ret <2 x i64> %result74}75 76define <2 x i64> @call_trunc_noop_unsigned_vector(<2 x i64> %a) {77 ; CHECK-LABEL: name: call_trunc_noop_unsigned_vector78 ; CHECK: bb.1.entry:79 ; CHECK-NEXT: liveins: $q080 ; CHECK-NEXT: {{ $}}81 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q082 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<2 x s32>) = nuw G_TRUNC [[COPY]](<2 x s64>)83 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(<2 x s64>) = G_ZEXT [[TRUNC]](<2 x s32>)84 ; CHECK-NEXT: $q0 = COPY [[ZEXT]](<2 x s64>)85 ; CHECK-NEXT: RET_ReallyLR implicit $q086entry:87 %truncate = trunc nuw <2 x i64> %a to <2 x i32>88 %result = zext <2 x i32> %truncate to <2 x i64>89 ret <2 x i64> %result90}91