brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · 3851e59 Raw
208 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx \3; RUN:     -enable-legalize-types-checking | FileCheck %s4; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx \5; RUN:     -enable-legalize-types-checking | FileCheck %s6 7define i32 @TestComp128GT(fp128 %d1, fp128 %d2) {8; CHECK-LABEL: TestComp128GT:9; CHECK:       # %bb.0: # %entry10; CHECK-NEXT:    pushq %rax11; CHECK-NEXT:    .cfi_def_cfa_offset 1612; CHECK-NEXT:    callq __gttf2@PLT13; CHECK-NEXT:    xorl %ecx, %ecx14; CHECK-NEXT:    testl %eax, %eax15; CHECK-NEXT:    setg %cl16; CHECK-NEXT:    movl %ecx, %eax17; CHECK-NEXT:    popq %rcx18; CHECK-NEXT:    .cfi_def_cfa_offset 819; CHECK-NEXT:    retq20entry:21  %cmp = fcmp ogt fp128 %d1, %d222  %conv = zext i1 %cmp to i3223  ret i32 %conv24}25 26define i32 @TestComp128GE(fp128 %d1, fp128 %d2) {27; CHECK-LABEL: TestComp128GE:28; CHECK:       # %bb.0: # %entry29; CHECK-NEXT:    pushq %rax30; CHECK-NEXT:    .cfi_def_cfa_offset 1631; CHECK-NEXT:    callq __getf2@PLT32; CHECK-NEXT:    xorl %ecx, %ecx33; CHECK-NEXT:    testl %eax, %eax34; CHECK-NEXT:    setns %cl35; CHECK-NEXT:    movl %ecx, %eax36; CHECK-NEXT:    popq %rcx37; CHECK-NEXT:    .cfi_def_cfa_offset 838; CHECK-NEXT:    retq39entry:40  %cmp = fcmp oge fp128 %d1, %d241  %conv = zext i1 %cmp to i3242  ret i32 %conv43}44 45define i32 @TestComp128LT(fp128 %d1, fp128 %d2) {46; CHECK-LABEL: TestComp128LT:47; CHECK:       # %bb.0: # %entry48; CHECK-NEXT:    pushq %rax49; CHECK-NEXT:    .cfi_def_cfa_offset 1650; CHECK-NEXT:    callq __lttf2@PLT51; CHECK-NEXT:    xorl %ecx, %ecx52; CHECK-NEXT:    testl %eax, %eax53; CHECK-NEXT:    sets %cl54; CHECK-NEXT:    movl %ecx, %eax55; CHECK-NEXT:    popq %rcx56; CHECK-NEXT:    .cfi_def_cfa_offset 857; CHECK-NEXT:    retq58entry:59  %cmp = fcmp olt fp128 %d1, %d260  %conv = zext i1 %cmp to i3261  ret i32 %conv62; FIXME: This used to generate a shrl to move the sign bit of eax into bit 0.63; This no longer happens with fp128 compares being expanded by LegalizeDAG.64; We can add a new DAG combine for X86ISD::CMP/SETCC to restore this.65}66 67define i32 @TestComp128LE(fp128 %d1, fp128 %d2) {68; CHECK-LABEL: TestComp128LE:69; CHECK:       # %bb.0: # %entry70; CHECK-NEXT:    pushq %rax71; CHECK-NEXT:    .cfi_def_cfa_offset 1672; CHECK-NEXT:    callq __letf2@PLT73; CHECK-NEXT:    xorl %ecx, %ecx74; CHECK-NEXT:    testl %eax, %eax75; CHECK-NEXT:    setle %cl76; CHECK-NEXT:    movl %ecx, %eax77; CHECK-NEXT:    popq %rcx78; CHECK-NEXT:    .cfi_def_cfa_offset 879; CHECK-NEXT:    retq80entry:81  %cmp = fcmp ole fp128 %d1, %d282  %conv = zext i1 %cmp to i3283  ret i32 %conv84}85 86define i32 @TestComp128EQ(fp128 %d1, fp128 %d2) {87; CHECK-LABEL: TestComp128EQ:88; CHECK:       # %bb.0: # %entry89; CHECK-NEXT:    pushq %rax90; CHECK-NEXT:    .cfi_def_cfa_offset 1691; CHECK-NEXT:    callq __eqtf2@PLT92; CHECK-NEXT:    xorl %ecx, %ecx93; CHECK-NEXT:    testl %eax, %eax94; CHECK-NEXT:    sete %cl95; CHECK-NEXT:    movl %ecx, %eax96; CHECK-NEXT:    popq %rcx97; CHECK-NEXT:    .cfi_def_cfa_offset 898; CHECK-NEXT:    retq99entry:100  %cmp = fcmp oeq fp128 %d1, %d2101  %conv = zext i1 %cmp to i32102  ret i32 %conv103}104 105define i32 @TestComp128NE(fp128 %d1, fp128 %d2) {106; CHECK-LABEL: TestComp128NE:107; CHECK:       # %bb.0: # %entry108; CHECK-NEXT:    pushq %rax109; CHECK-NEXT:    .cfi_def_cfa_offset 16110; CHECK-NEXT:    callq __netf2@PLT111; CHECK-NEXT:    xorl %ecx, %ecx112; CHECK-NEXT:    testl %eax, %eax113; CHECK-NEXT:    setne %cl114; CHECK-NEXT:    movl %ecx, %eax115; CHECK-NEXT:    popq %rcx116; CHECK-NEXT:    .cfi_def_cfa_offset 8117; CHECK-NEXT:    retq118entry:119  %cmp = fcmp une fp128 %d1, %d2120  %conv = zext i1 %cmp to i32121  ret i32 %conv122}123 124define i32 @TestComp128UEQ(fp128 %d1, fp128 %d2) {125; CHECK-LABEL: TestComp128UEQ:126; CHECK:       # %bb.0: # %entry127; CHECK-NEXT:    pushq %rbx128; CHECK-NEXT:    .cfi_def_cfa_offset 16129; CHECK-NEXT:    subq $32, %rsp130; CHECK-NEXT:    .cfi_def_cfa_offset 48131; CHECK-NEXT:    .cfi_offset %rbx, -16132; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill133; CHECK-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill134; CHECK-NEXT:    callq __eqtf2@PLT135; CHECK-NEXT:    testl %eax, %eax136; CHECK-NEXT:    sete %bl137; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload138; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload139; CHECK-NEXT:    callq __unordtf2@PLT140; CHECK-NEXT:    testl %eax, %eax141; CHECK-NEXT:    setne %al142; CHECK-NEXT:    orb %bl, %al143; CHECK-NEXT:    movzbl %al, %eax144; CHECK-NEXT:    addq $32, %rsp145; CHECK-NEXT:    .cfi_def_cfa_offset 16146; CHECK-NEXT:    popq %rbx147; CHECK-NEXT:    .cfi_def_cfa_offset 8148; CHECK-NEXT:    retq149entry:150  %cmp = fcmp ueq fp128 %d1, %d2151  %conv = zext i1 %cmp to i32152  ret i32 %conv153}154 155define i32 @TestComp128ONE(fp128 %d1, fp128 %d2) {156; CHECK-LABEL: TestComp128ONE:157; CHECK:       # %bb.0: # %entry158; CHECK-NEXT:    pushq %rbx159; CHECK-NEXT:    .cfi_def_cfa_offset 16160; CHECK-NEXT:    subq $32, %rsp161; CHECK-NEXT:    .cfi_def_cfa_offset 48162; CHECK-NEXT:    .cfi_offset %rbx, -16163; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill164; CHECK-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill165; CHECK-NEXT:    callq __eqtf2@PLT166; CHECK-NEXT:    testl %eax, %eax167; CHECK-NEXT:    setne %bl168; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload169; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload170; CHECK-NEXT:    callq __unordtf2@PLT171; CHECK-NEXT:    testl %eax, %eax172; CHECK-NEXT:    sete %al173; CHECK-NEXT:    andb %bl, %al174; CHECK-NEXT:    movzbl %al, %eax175; CHECK-NEXT:    addq $32, %rsp176; CHECK-NEXT:    .cfi_def_cfa_offset 16177; CHECK-NEXT:    popq %rbx178; CHECK-NEXT:    .cfi_def_cfa_offset 8179; CHECK-NEXT:    retq180entry:181  %cmp = fcmp one fp128 %d1, %d2182  %conv = zext i1 %cmp to i32183  ret i32 %conv184}185 186define fp128 @TestMax(fp128 %x, fp128 %y) {187; CHECK-LABEL: TestMax:188; CHECK:       # %bb.0: # %entry189; CHECK-NEXT:    subq $40, %rsp190; CHECK-NEXT:    .cfi_def_cfa_offset 48191; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill192; CHECK-NEXT:    movaps %xmm1, (%rsp) # 16-byte Spill193; CHECK-NEXT:    callq __gttf2@PLT194; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload195; CHECK-NEXT:    testl %eax, %eax196; CHECK-NEXT:    jg .LBB8_2197; CHECK-NEXT:  # %bb.1: # %entry198; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload199; CHECK-NEXT:  .LBB8_2: # %entry200; CHECK-NEXT:    addq $40, %rsp201; CHECK-NEXT:    .cfi_def_cfa_offset 8202; CHECK-NEXT:    retq203entry:204  %cmp = fcmp ogt fp128 %x, %y205  %cond = select i1 %cmp, fp128 %x, fp128 %y206  ret fp128 %cond207}208