99 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-- < %s | FileCheck %s3 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, #248; CHECK-NEXT: ret9 %f = sitofp i32 %a to float10 %i = fptosi float %f to i2411 %r = sext i24 %i to i3212 ret i32 %r13}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, #0xffffff19; CHECK-NEXT: ret20 %f = sitofp i32 %a to float21 %i = fptoui float %f to i2422 %r = zext i24 %i to i3223 ret i32 %r24}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, #2430; CHECK-NEXT: ret31 %f = uitofp i32 %a to float32 %i = fptosi float %f to i2433 %r = sext i24 %i to i3234 ret i32 %r35}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, #0xffffff41; CHECK-NEXT: ret42 %f = uitofp i32 %a to float43 %i = fptoui float %f to i2444 %r = zext i24 %i to i3245 ret i32 %r46}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, w054; CHECK-NEXT: fcvtzs w0, s055; CHECK-NEXT: ret56 %f = sitofp i32 %a to float57 %i = fptosi float %f to i2558 %r = sext i25 %i to i3259 ret i32 %r60}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, w066; CHECK-NEXT: fcvtzs w0, s067; CHECK-NEXT: ret68 %f = sitofp i32 %a to float69 %i = fptoui float %f to i2570 %r = zext i25 %i to i3271 ret i32 %r72}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, w080; CHECK-NEXT: fcvtzs w0, s081; CHECK-NEXT: ret82 %f = uitofp i32 %a to float83 %i = fptosi float %f to i2584 %r = sext i25 %i to i3285 ret i32 %r86}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, w092; CHECK-NEXT: fcvtzs w0, s093; CHECK-NEXT: ret94 %f = uitofp i32 %a to float95 %i = fptoui float %f to i2596 %r = zext i25 %i to i3297 ret i32 %r98}99