1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=aarch64-- < %s | FileCheck %s 3 4define i32 @s32_f32_s24_s32(i32 %a) { 5; CHECK-LABEL: s32_f32_s24_s32: 6; CHECK: // %bb.0: 7; CHECK-NEXT: sbfx w0, w0, #0, #24 8; CHECK-NEXT: ret 9 %f = sitofp i32 %a to float 10 %i = fptosi float %f to i24 11 %r = sext i24 %i to i32 12 ret i32 %r 13} 14 15define i32 @s32_f32_u24_u32(i32 %a) { 16; CHECK-LABEL: s32_f32_u24_u32: 17; CHECK: // %bb.0: 18; CHECK-NEXT: and w0, w0, #0xffffff 19; CHECK-NEXT: ret 20 %f = sitofp i32 %a to float 21 %i = fptoui float %f to i24 22 %r = zext i24 %i to i32 23 ret i32 %r 24} 25 26define i32 @u32_f32_s24_s32(i32 %a) { 27; CHECK-LABEL: u32_f32_s24_s32: 28; CHECK: // %bb.0: 29; CHECK-NEXT: sbfx w0, w0, #0, #24 30; CHECK-NEXT: ret 31 %f = uitofp i32 %a to float 32 %i = fptosi float %f to i24 33 %r = sext i24 %i to i32 34 ret i32 %r 35} 36 37define i32 @u32_f32_u24_u32(i32 %a) { 38; CHECK-LABEL: u32_f32_u24_u32: 39; CHECK: // %bb.0: 40; CHECK-NEXT: and w0, w0, #0xffffff 41; CHECK-NEXT: ret 42 %f = uitofp i32 %a to float 43 %i = fptoui float %f to i24 44 %r = zext i24 %i to i32 45 ret i32 %r 46} 47 48; This requires converting to FP and back. 49 50define i32 @s32_f32_s25_s32(i32 %a) { 51; CHECK-LABEL: s32_f32_s25_s32: 52; CHECK: // %bb.0: 53; CHECK-NEXT: scvtf s0, w0 54; CHECK-NEXT: fcvtzs w0, s0 55; CHECK-NEXT: ret 56 %f = sitofp i32 %a to float 57 %i = fptosi float %f to i25 58 %r = sext i25 %i to i32 59 ret i32 %r 60} 61 62define i32 @s32_f32_u25_u32(i32 %a) { 63; CHECK-LABEL: s32_f32_u25_u32: 64; CHECK: // %bb.0: 65; CHECK-NEXT: scvtf s0, w0 66; CHECK-NEXT: fcvtzs w0, s0 67; CHECK-NEXT: ret 68 %f = sitofp i32 %a to float 69 %i = fptoui float %f to i25 70 %r = zext i25 %i to i32 71 ret i32 %r 72} 73 74; TODO: This could avoid converting to FP. 75 76define i32 @u32_f32_s25_s32(i32 %a) { 77; CHECK-LABEL: u32_f32_s25_s32: 78; CHECK: // %bb.0: 79; CHECK-NEXT: ucvtf s0, w0 80; CHECK-NEXT: fcvtzs w0, s0 81; CHECK-NEXT: ret 82 %f = uitofp i32 %a to float 83 %i = fptosi float %f to i25 84 %r = sext i25 %i to i32 85 ret i32 %r 86} 87 88define i32 @u32_f32_u25_u32(i32 %a) { 89; CHECK-LABEL: u32_f32_u25_u32: 90; CHECK: // %bb.0: 91; CHECK-NEXT: ucvtf s0, w0 92; CHECK-NEXT: fcvtzs w0, s0 93; CHECK-NEXT: ret 94 %f = uitofp i32 %a to float 95 %i = fptoui float %f to i25 96 %r = zext i25 %i to i32 97 ret i32 %r 98} 99