138 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-- -mcpu=x86-64 < %s | FileCheck %s3 4define i32 @u8_f32_s32(i8 %a) {5; CHECK-LABEL: u8_f32_s32:6; CHECK: # %bb.0:7; CHECK-NEXT: movzbl %dil, %eax8; CHECK-NEXT: retq9 %conv = uitofp i8 %a to float10 %conv1 = fptosi float %conv to i3211 ret i32 %conv112}13 14define i32 @s8_f32_s32(i8 %a) {15; CHECK-LABEL: s8_f32_s32:16; CHECK: # %bb.0:17; CHECK-NEXT: movsbl %dil, %eax18; CHECK-NEXT: retq19 %conv = sitofp i8 %a to float20 %conv1 = fptosi float %conv to i3221 ret i32 %conv122}23 24define zeroext i8 @u8_f32_u8(i8 zeroext %a) {25; CHECK-LABEL: u8_f32_u8:26; CHECK: # %bb.0:27; CHECK-NEXT: movl %edi, %eax28; CHECK-NEXT: # kill: def $al killed $al killed $eax29; CHECK-NEXT: retq30 %conv = uitofp i8 %a to float31 %conv1 = fptoui float %conv to i832 ret i8 %conv133}34 35define i32 @s32_f32_s24_s32(i32 %a) {36; CHECK-LABEL: s32_f32_s24_s32:37; CHECK: # %bb.0:38; CHECK-NEXT: movl %edi, %eax39; CHECK-NEXT: shll $8, %eax40; CHECK-NEXT: sarl $8, %eax41; CHECK-NEXT: retq42 %f = sitofp i32 %a to float43 %i = fptosi float %f to i2444 %r = sext i24 %i to i3245 ret i32 %r46}47 48define i32 @s32_f32_u24_u32(i32 %a) {49; CHECK-LABEL: s32_f32_u24_u32:50; CHECK: # %bb.0:51; CHECK-NEXT: movl %edi, %eax52; CHECK-NEXT: andl $16777215, %eax # imm = 0xFFFFFF53; CHECK-NEXT: retq54 %f = sitofp i32 %a to float55 %i = fptoui float %f to i2456 %r = zext i24 %i to i3257 ret i32 %r58}59 60define i32 @u32_f32_s24_s32(i32 %a) {61; CHECK-LABEL: u32_f32_s24_s32:62; CHECK: # %bb.0:63; CHECK-NEXT: movl %edi, %eax64; CHECK-NEXT: shll $8, %eax65; CHECK-NEXT: sarl $8, %eax66; CHECK-NEXT: retq67 %f = uitofp i32 %a to float68 %i = fptosi float %f to i2469 %r = sext i24 %i to i3270 ret i32 %r71}72 73define i32 @u32_f32_u24_u32(i32 %a) {74; CHECK-LABEL: u32_f32_u24_u32:75; CHECK: # %bb.0:76; CHECK-NEXT: movl %edi, %eax77; CHECK-NEXT: andl $16777215, %eax # imm = 0xFFFFFF78; CHECK-NEXT: retq79 %f = uitofp i32 %a to float80 %i = fptoui float %f to i2481 %r = zext i24 %i to i3282 ret i32 %r83}84 85; This requires converting to FP and back.86 87define i32 @s32_f32_s25_s32(i32 %a) {88; CHECK-LABEL: s32_f32_s25_s32:89; CHECK: # %bb.0:90; CHECK-NEXT: cvtsi2ss %edi, %xmm091; CHECK-NEXT: cvttss2si %xmm0, %eax92; CHECK-NEXT: retq93 %f = sitofp i32 %a to float94 %i = fptosi float %f to i2595 %r = sext i25 %i to i3296 ret i32 %r97}98 99define i32 @s32_f32_u25_u32(i32 %a) {100; CHECK-LABEL: s32_f32_u25_u32:101; CHECK: # %bb.0:102; CHECK-NEXT: cvtsi2ss %edi, %xmm0103; CHECK-NEXT: cvttss2si %xmm0, %eax104; CHECK-NEXT: retq105 %f = sitofp i32 %a to float106 %i = fptoui float %f to i25107 %r = zext i25 %i to i32108 ret i32 %r109}110 111; TODO: This could avoid converting to FP.112 113define i32 @u32_f32_s25_s32(i32 %a) {114; CHECK-LABEL: u32_f32_s25_s32:115; CHECK: # %bb.0:116; CHECK-NEXT: movl %edi, %eax117; CHECK-NEXT: cvtsi2ss %rax, %xmm0118; CHECK-NEXT: cvttss2si %xmm0, %eax119; CHECK-NEXT: retq120 %f = uitofp i32 %a to float121 %i = fptosi float %f to i25122 %r = sext i25 %i to i32123 ret i32 %r124}125 126define i32 @u32_f32_u25_u32(i32 %a) {127; CHECK-LABEL: u32_f32_u25_u32:128; CHECK: # %bb.0:129; CHECK-NEXT: movl %edi, %eax130; CHECK-NEXT: cvtsi2ss %rax, %xmm0131; CHECK-NEXT: cvttss2si %xmm0, %eax132; CHECK-NEXT: retq133 %f = uitofp i32 %a to float134 %i = fptoui float %f to i25135 %r = zext i25 %i to i32136 ret i32 %r137}138