122 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64_be-- < %s | FileCheck %s --check-prefix=BE3; RUN: llc -mtriple=aarch64-- < %s | FileCheck %s --check-prefix=LE4 5define i32 @trunc_i64_to_i32_le(i64 %x) {6; BE-LABEL: trunc_i64_to_i32_le:7; BE: // %bb.0:8; BE-NEXT: lsr x0, x0, #329; BE-NEXT: // kill: def $w0 killed $w0 killed $x010; BE-NEXT: ret11;12; LE-LABEL: trunc_i64_to_i32_le:13; LE: // %bb.0:14; LE-NEXT: // kill: def $w0 killed $w0 killed $x015; LE-NEXT: ret16 %ins = insertelement <2 x i64> undef, i64 %x, i32 017 %bc = bitcast <2 x i64> %ins to <4 x i32>18 %ext = extractelement <4 x i32> %bc, i32 019 ret i32 %ext20}21 22define i32 @trunc_i64_to_i32_be(i64 %x) {23; BE-LABEL: trunc_i64_to_i32_be:24; BE: // %bb.0:25; BE-NEXT: // kill: def $w0 killed $w0 killed $x026; BE-NEXT: ret27;28; LE-LABEL: trunc_i64_to_i32_be:29; LE: // %bb.0:30; LE-NEXT: lsr x0, x0, #3231; LE-NEXT: // kill: def $w0 killed $w0 killed $x032; LE-NEXT: ret33 %ins = insertelement <2 x i64> undef, i64 %x, i32 034 %bc = bitcast <2 x i64> %ins to <4 x i32>35 %ext = extractelement <4 x i32> %bc, i32 136 ret i32 %ext37}38 39define i16 @trunc_i64_to_i16_le(i64 %x) {40; BE-LABEL: trunc_i64_to_i16_le:41; BE: // %bb.0:42; BE-NEXT: lsr x0, x0, #4843; BE-NEXT: // kill: def $w0 killed $w0 killed $x044; BE-NEXT: ret45;46; LE-LABEL: trunc_i64_to_i16_le:47; LE: // %bb.0:48; LE-NEXT: // kill: def $w0 killed $w0 killed $x049; LE-NEXT: ret50 %ins = insertelement <2 x i64> undef, i64 %x, i32 051 %bc = bitcast <2 x i64> %ins to <8 x i16>52 %ext = extractelement <8 x i16> %bc, i32 053 ret i16 %ext54}55 56define i16 @trunc_i64_to_i16_be(i64 %x) {57; BE-LABEL: trunc_i64_to_i16_be:58; BE: // %bb.0:59; BE-NEXT: // kill: def $w0 killed $w0 killed $x060; BE-NEXT: ret61;62; LE-LABEL: trunc_i64_to_i16_be:63; LE: // %bb.0:64; LE-NEXT: lsr x0, x0, #4865; LE-NEXT: // kill: def $w0 killed $w0 killed $x066; LE-NEXT: ret67 %ins = insertelement <2 x i64> undef, i64 %x, i32 068 %bc = bitcast <2 x i64> %ins to <8 x i16>69 %ext = extractelement <8 x i16> %bc, i32 370 ret i16 %ext71}72 73define i8 @trunc_i32_to_i8_le(i32 %x) {74; BE-LABEL: trunc_i32_to_i8_le:75; BE: // %bb.0:76; BE-NEXT: lsr w0, w0, #2477; BE-NEXT: ret78;79; LE-LABEL: trunc_i32_to_i8_le:80; LE: // %bb.0:81; LE-NEXT: ret82 %ins = insertelement <4 x i32> undef, i32 %x, i32 083 %bc = bitcast <4 x i32> %ins to <16 x i8>84 %ext = extractelement <16 x i8> %bc, i32 085 ret i8 %ext86}87 88define i8 @trunc_i32_to_i8_be(i32 %x) {89; BE-LABEL: trunc_i32_to_i8_be:90; BE: // %bb.0:91; BE-NEXT: ret92;93; LE-LABEL: trunc_i32_to_i8_be:94; LE: // %bb.0:95; LE-NEXT: lsr w0, w0, #2496; LE-NEXT: ret97 %ins = insertelement <4 x i32> undef, i32 %x, i32 098 %bc = bitcast <4 x i32> %ins to <16 x i8>99 %ext = extractelement <16 x i8> %bc, i32 3100 ret i8 %ext101}102 103; Weird type (non-power-of-2 vector) is ok.104 105define i8 @trunc_i64_to_i8_be(i64 %x) {106; BE-LABEL: trunc_i64_to_i8_be:107; BE: // %bb.0:108; BE-NEXT: // kill: def $w0 killed $w0 killed $x0109; BE-NEXT: ret110;111; LE-LABEL: trunc_i64_to_i8_be:112; LE: // %bb.0:113; LE-NEXT: lsr x0, x0, #56114; LE-NEXT: // kill: def $w0 killed $w0 killed $x0115; LE-NEXT: ret116 %ins = insertelement <3 x i64> undef, i64 %x, i32 0117 %bc = bitcast <3 x i64> %ins to <24 x i8>118 %ext = extractelement <24 x i8> %bc, i32 7119 ret i8 %ext120}121 122