brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 2a543df Raw
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