Skip to content

Commit 505c550

Browse files
authored
DAG: Assert fcmp uno runtime calls are boolean values (#142898)
This saves 2 instructions in the ARM soft float case for fcmp ueq. This code is written in an confusingly overly general way. The point of getCmpLibcallCC is to express that the compiler-rt implementations of the FP compares are different aliases around functions which may return -1 in some cases. This does not apply to the call for unordered, which returns a normal boolean. Also stop overriding the default value for the unordered compare for ARM. This was setting it to the same value as the default, which is now assumed.
1 parent 4855610 commit 505c550

File tree

11 files changed

+102
-75
lines changed

11 files changed

+102
-75
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15012,6 +15012,25 @@ SDValue DAGCombiner::visitAssertExt(SDNode *N) {
1501215012
}
1501315013
}
1501415014

15015+
// If we have (AssertZext (and (AssertSext X, iX), M), iY) and Y is smaller
15016+
// than X, and the And doesn't change the lower iX bits, we can move the
15017+
// AssertZext in front of the And and drop the AssertSext.
15018+
if (Opcode == ISD::AssertZext && N0.getOpcode() == ISD::AND &&
15019+
N0.hasOneUse() && N0.getOperand(0).getOpcode() == ISD::AssertSext &&
15020+
isa<ConstantSDNode>(N0.getOperand(1))) {
15021+
SDValue BigA = N0.getOperand(0);
15022+
EVT BigA_AssertVT = cast<VTSDNode>(BigA.getOperand(1))->getVT();
15023+
const APInt &Mask = N0.getConstantOperandAPInt(1);
15024+
if (AssertVT.bitsLT(BigA_AssertVT) &&
15025+
Mask.countr_one() >= BigA_AssertVT.getScalarSizeInBits()) {
15026+
SDLoc DL(N);
15027+
SDValue NewAssert =
15028+
DAG.getNode(Opcode, DL, N->getValueType(0), BigA.getOperand(0), N1);
15029+
return DAG.getNode(ISD::AND, DL, N->getValueType(0), NewAssert,
15030+
N0.getOperand(1));
15031+
}
15032+
}
15033+
1501515034
return SDValue();
1501615035
}
1501715036

llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,8 +429,16 @@ void TargetLowering::softenSetCCOperands(SelectionDAG &DAG, EVT VT,
429429
// Update Chain.
430430
Chain = Call.second;
431431
} else {
432+
assert(CCCode == (ShouldInvertCC ? ISD::SETEQ : ISD::SETNE) &&
433+
"unordered call should be simple boolean");
434+
432435
EVT SetCCVT =
433436
getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), RetVT);
437+
if (getBooleanContents(RetVT) == ZeroOrOneBooleanContent) {
438+
NewLHS = DAG.getNode(ISD::AssertZext, dl, RetVT, Call.first,
439+
DAG.getValueType(MVT::i1));
440+
}
441+
434442
SDValue Tmp = DAG.getSetCC(dl, SetCCVT, NewLHS, NewRHS, CCCode);
435443
auto Call2 = makeLibCall(DAG, LC2, RetVT, Ops, CallOptions, dl, Chain);
436444
CCCode = getCmpLibcallCC(LC2);

llvm/lib/Target/ARM/ARMISelLowering.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM,
613613
{ RTLIB::OLE_F64, "__aeabi_dcmple", CallingConv::ARM_AAPCS, ISD::SETNE },
614614
{ RTLIB::OGE_F64, "__aeabi_dcmpge", CallingConv::ARM_AAPCS, ISD::SETNE },
615615
{ RTLIB::OGT_F64, "__aeabi_dcmpgt", CallingConv::ARM_AAPCS, ISD::SETNE },
616-
{ RTLIB::UO_F64, "__aeabi_dcmpun", CallingConv::ARM_AAPCS, ISD::SETNE },
616+
{ RTLIB::UO_F64, "__aeabi_dcmpun", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
617617

618618
// Single-precision floating-point arithmetic helper functions
619619
// RTABI chapter 4.1.2, Table 4
@@ -630,7 +630,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM,
630630
{ RTLIB::OLE_F32, "__aeabi_fcmple", CallingConv::ARM_AAPCS, ISD::SETNE },
631631
{ RTLIB::OGE_F32, "__aeabi_fcmpge", CallingConv::ARM_AAPCS, ISD::SETNE },
632632
{ RTLIB::OGT_F32, "__aeabi_fcmpgt", CallingConv::ARM_AAPCS, ISD::SETNE },
633-
{ RTLIB::UO_F32, "__aeabi_fcmpun", CallingConv::ARM_AAPCS, ISD::SETNE },
633+
{ RTLIB::UO_F32, "__aeabi_fcmpun", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
634634

635635
// Floating-point to integer conversions.
636636
// RTABI chapter 4.1.2, Table 6

llvm/test/CodeGen/ARM/fpcmp_ueq.ll

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ entry:
99
}
1010

1111
; CHECK-ARMv4-LABEL: f7:
12-
; CHECK-ARMv4-DAG: bl ___eqsf2
13-
; CHECK-ARMv4-DAG: bl ___unordsf2
14-
; CHECK-ARMv4: cmp r0, #0
15-
; CHECK-ARMv4: movne r0, #1
16-
; CHECK-ARMv4: orrs r0, r0,
17-
; CHECK-ARMv4: moveq r0, #42
12+
; CHECK-ARMv4: bl ___eqsf2
13+
; CHECK-ARMv4-NEXT: rsbs r1, r0, #0
14+
; CHECK-ARMv4-NEXT: adc r6, r0, r1
15+
16+
; CHECK-ARMv4: bl ___unordsf2
17+
; CHECK-ARMv4-NEXT: orrs r0, r0, r6
18+
; CHECK-ARMv4-NEXT: mov r0, #154
1819

1920
; CHECK-ARMv7-LABEL: f7:
2021
; CHECK-ARMv7: vcmp.f32

llvm/test/CodeGen/RISCV/double-fcmp-strict.ll

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -471,15 +471,15 @@ define i32 @fcmp_ueq(double %a, double %b) nounwind strictfp {
471471
; RV32I-NEXT: mv s1, a2
472472
; RV32I-NEXT: mv s2, a1
473473
; RV32I-NEXT: mv s3, a0
474-
; RV32I-NEXT: call __eqdf2
475-
; RV32I-NEXT: seqz s4, a0
474+
; RV32I-NEXT: call __unorddf2
475+
; RV32I-NEXT: mv s4, a0
476476
; RV32I-NEXT: mv a0, s3
477477
; RV32I-NEXT: mv a1, s2
478478
; RV32I-NEXT: mv a2, s1
479479
; RV32I-NEXT: mv a3, s0
480-
; RV32I-NEXT: call __unorddf2
481-
; RV32I-NEXT: snez a0, a0
482-
; RV32I-NEXT: or a0, a0, s4
480+
; RV32I-NEXT: call __eqdf2
481+
; RV32I-NEXT: seqz a0, a0
482+
; RV32I-NEXT: or a0, s4, a0
483483
; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
484484
; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload
485485
; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload
@@ -498,13 +498,13 @@ define i32 @fcmp_ueq(double %a, double %b) nounwind strictfp {
498498
; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
499499
; RV64I-NEXT: mv s0, a1
500500
; RV64I-NEXT: mv s1, a0
501-
; RV64I-NEXT: call __eqdf2
502-
; RV64I-NEXT: seqz s2, a0
501+
; RV64I-NEXT: call __unorddf2
502+
; RV64I-NEXT: mv s2, a0
503503
; RV64I-NEXT: mv a0, s1
504504
; RV64I-NEXT: mv a1, s0
505-
; RV64I-NEXT: call __unorddf2
506-
; RV64I-NEXT: snez a0, a0
507-
; RV64I-NEXT: or a0, a0, s2
505+
; RV64I-NEXT: call __eqdf2
506+
; RV64I-NEXT: seqz a0, a0
507+
; RV64I-NEXT: or a0, s2, a0
508508
; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
509509
; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
510510
; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
@@ -1199,15 +1199,15 @@ define i32 @fcmps_ueq(double %a, double %b) nounwind strictfp {
11991199
; RV32I-NEXT: mv s1, a2
12001200
; RV32I-NEXT: mv s2, a1
12011201
; RV32I-NEXT: mv s3, a0
1202-
; RV32I-NEXT: call __eqdf2
1203-
; RV32I-NEXT: seqz s4, a0
1202+
; RV32I-NEXT: call __unorddf2
1203+
; RV32I-NEXT: mv s4, a0
12041204
; RV32I-NEXT: mv a0, s3
12051205
; RV32I-NEXT: mv a1, s2
12061206
; RV32I-NEXT: mv a2, s1
12071207
; RV32I-NEXT: mv a3, s0
1208-
; RV32I-NEXT: call __unorddf2
1209-
; RV32I-NEXT: snez a0, a0
1210-
; RV32I-NEXT: or a0, a0, s4
1208+
; RV32I-NEXT: call __eqdf2
1209+
; RV32I-NEXT: seqz a0, a0
1210+
; RV32I-NEXT: or a0, s4, a0
12111211
; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
12121212
; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload
12131213
; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload
@@ -1226,13 +1226,13 @@ define i32 @fcmps_ueq(double %a, double %b) nounwind strictfp {
12261226
; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
12271227
; RV64I-NEXT: mv s0, a1
12281228
; RV64I-NEXT: mv s1, a0
1229-
; RV64I-NEXT: call __eqdf2
1230-
; RV64I-NEXT: seqz s2, a0
1229+
; RV64I-NEXT: call __unorddf2
1230+
; RV64I-NEXT: mv s2, a0
12311231
; RV64I-NEXT: mv a0, s1
12321232
; RV64I-NEXT: mv a1, s0
1233-
; RV64I-NEXT: call __unorddf2
1234-
; RV64I-NEXT: snez a0, a0
1235-
; RV64I-NEXT: or a0, a0, s2
1233+
; RV64I-NEXT: call __eqdf2
1234+
; RV64I-NEXT: seqz a0, a0
1235+
; RV64I-NEXT: or a0, s2, a0
12361236
; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
12371237
; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
12381238
; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload

llvm/test/CodeGen/RISCV/double-fcmp.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -403,15 +403,15 @@ define i32 @fcmp_ueq(double %a, double %b) nounwind {
403403
; RV32I-NEXT: mv s1, a2
404404
; RV32I-NEXT: mv s2, a1
405405
; RV32I-NEXT: mv s3, a0
406-
; RV32I-NEXT: call __eqdf2
407-
; RV32I-NEXT: seqz s4, a0
406+
; RV32I-NEXT: call __unorddf2
407+
; RV32I-NEXT: mv s4, a0
408408
; RV32I-NEXT: mv a0, s3
409409
; RV32I-NEXT: mv a1, s2
410410
; RV32I-NEXT: mv a2, s1
411411
; RV32I-NEXT: mv a3, s0
412-
; RV32I-NEXT: call __unorddf2
413-
; RV32I-NEXT: snez a0, a0
414-
; RV32I-NEXT: or a0, a0, s4
412+
; RV32I-NEXT: call __eqdf2
413+
; RV32I-NEXT: seqz a0, a0
414+
; RV32I-NEXT: or a0, s4, a0
415415
; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
416416
; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload
417417
; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload
@@ -430,13 +430,13 @@ define i32 @fcmp_ueq(double %a, double %b) nounwind {
430430
; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
431431
; RV64I-NEXT: mv s0, a1
432432
; RV64I-NEXT: mv s1, a0
433-
; RV64I-NEXT: call __eqdf2
434-
; RV64I-NEXT: seqz s2, a0
433+
; RV64I-NEXT: call __unorddf2
434+
; RV64I-NEXT: mv s2, a0
435435
; RV64I-NEXT: mv a0, s1
436436
; RV64I-NEXT: mv a1, s0
437-
; RV64I-NEXT: call __unorddf2
438-
; RV64I-NEXT: snez a0, a0
439-
; RV64I-NEXT: or a0, a0, s2
437+
; RV64I-NEXT: call __eqdf2
438+
; RV64I-NEXT: seqz a0, a0
439+
; RV64I-NEXT: or a0, s2, a0
440440
; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
441441
; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
442442
; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload

llvm/test/CodeGen/RISCV/float-fcmp-strict.ll

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -382,13 +382,13 @@ define i32 @fcmp_ueq(float %a, float %b) nounwind strictfp {
382382
; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill
383383
; RV32I-NEXT: mv s0, a1
384384
; RV32I-NEXT: mv s1, a0
385-
; RV32I-NEXT: call __eqsf2
386-
; RV32I-NEXT: seqz s2, a0
385+
; RV32I-NEXT: call __unordsf2
386+
; RV32I-NEXT: mv s2, a0
387387
; RV32I-NEXT: mv a0, s1
388388
; RV32I-NEXT: mv a1, s0
389-
; RV32I-NEXT: call __unordsf2
390-
; RV32I-NEXT: snez a0, a0
391-
; RV32I-NEXT: or a0, a0, s2
389+
; RV32I-NEXT: call __eqsf2
390+
; RV32I-NEXT: seqz a0, a0
391+
; RV32I-NEXT: or a0, s2, a0
392392
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
393393
; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
394394
; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
@@ -405,13 +405,13 @@ define i32 @fcmp_ueq(float %a, float %b) nounwind strictfp {
405405
; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
406406
; RV64I-NEXT: mv s0, a1
407407
; RV64I-NEXT: mv s1, a0
408-
; RV64I-NEXT: call __eqsf2
409-
; RV64I-NEXT: seqz s2, a0
408+
; RV64I-NEXT: call __unordsf2
409+
; RV64I-NEXT: mv s2, a0
410410
; RV64I-NEXT: mv a0, s1
411411
; RV64I-NEXT: mv a1, s0
412-
; RV64I-NEXT: call __unordsf2
413-
; RV64I-NEXT: snez a0, a0
414-
; RV64I-NEXT: or a0, a0, s2
412+
; RV64I-NEXT: call __eqsf2
413+
; RV64I-NEXT: seqz a0, a0
414+
; RV64I-NEXT: or a0, s2, a0
415415
; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
416416
; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
417417
; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
@@ -991,13 +991,13 @@ define i32 @fcmps_ueq(float %a, float %b) nounwind strictfp {
991991
; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill
992992
; RV32I-NEXT: mv s0, a1
993993
; RV32I-NEXT: mv s1, a0
994-
; RV32I-NEXT: call __eqsf2
995-
; RV32I-NEXT: seqz s2, a0
994+
; RV32I-NEXT: call __unordsf2
995+
; RV32I-NEXT: mv s2, a0
996996
; RV32I-NEXT: mv a0, s1
997997
; RV32I-NEXT: mv a1, s0
998-
; RV32I-NEXT: call __unordsf2
999-
; RV32I-NEXT: snez a0, a0
1000-
; RV32I-NEXT: or a0, a0, s2
998+
; RV32I-NEXT: call __eqsf2
999+
; RV32I-NEXT: seqz a0, a0
1000+
; RV32I-NEXT: or a0, s2, a0
10011001
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
10021002
; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
10031003
; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
@@ -1014,13 +1014,13 @@ define i32 @fcmps_ueq(float %a, float %b) nounwind strictfp {
10141014
; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
10151015
; RV64I-NEXT: mv s0, a1
10161016
; RV64I-NEXT: mv s1, a0
1017-
; RV64I-NEXT: call __eqsf2
1018-
; RV64I-NEXT: seqz s2, a0
1017+
; RV64I-NEXT: call __unordsf2
1018+
; RV64I-NEXT: mv s2, a0
10191019
; RV64I-NEXT: mv a0, s1
10201020
; RV64I-NEXT: mv a1, s0
1021-
; RV64I-NEXT: call __unordsf2
1022-
; RV64I-NEXT: snez a0, a0
1023-
; RV64I-NEXT: or a0, a0, s2
1021+
; RV64I-NEXT: call __eqsf2
1022+
; RV64I-NEXT: seqz a0, a0
1023+
; RV64I-NEXT: or a0, s2, a0
10241024
; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
10251025
; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
10261026
; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload

llvm/test/CodeGen/RISCV/float-fcmp.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -344,13 +344,13 @@ define i32 @fcmp_ueq(float %a, float %b) nounwind {
344344
; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill
345345
; RV32I-NEXT: mv s0, a1
346346
; RV32I-NEXT: mv s1, a0
347-
; RV32I-NEXT: call __eqsf2
348-
; RV32I-NEXT: seqz s2, a0
347+
; RV32I-NEXT: call __unordsf2
348+
; RV32I-NEXT: mv s2, a0
349349
; RV32I-NEXT: mv a0, s1
350350
; RV32I-NEXT: mv a1, s0
351-
; RV32I-NEXT: call __unordsf2
352-
; RV32I-NEXT: snez a0, a0
353-
; RV32I-NEXT: or a0, a0, s2
351+
; RV32I-NEXT: call __eqsf2
352+
; RV32I-NEXT: seqz a0, a0
353+
; RV32I-NEXT: or a0, s2, a0
354354
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
355355
; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
356356
; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
@@ -367,13 +367,13 @@ define i32 @fcmp_ueq(float %a, float %b) nounwind {
367367
; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
368368
; RV64I-NEXT: mv s0, a1
369369
; RV64I-NEXT: mv s1, a0
370-
; RV64I-NEXT: call __eqsf2
371-
; RV64I-NEXT: seqz s2, a0
370+
; RV64I-NEXT: call __unordsf2
371+
; RV64I-NEXT: mv s2, a0
372372
; RV64I-NEXT: mv a0, s1
373373
; RV64I-NEXT: mv a1, s0
374-
; RV64I-NEXT: call __unordsf2
375-
; RV64I-NEXT: snez a0, a0
376-
; RV64I-NEXT: or a0, a0, s2
374+
; RV64I-NEXT: call __eqsf2
375+
; RV64I-NEXT: seqz a0, a0
376+
; RV64I-NEXT: or a0, s2, a0
377377
; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
378378
; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
379379
; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload

llvm/test/CodeGen/Thumb2/float-cmp.ll

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,13 @@ define i1 @cmp_d_one(double %a, double %b) {
200200
; CHECK-LABEL: cmp_d_one:
201201
; NONE: bl __aeabi_dcmpeq
202202
; NONE: bl __aeabi_dcmpun
203-
; SP: bl __aeabi_dcmpeq
204203
; SP: bl __aeabi_dcmpun
204+
; SP: eor r8, r0, #1
205+
; SP: bl __aeabi_dcmpeq
206+
; SP-NEXT: clz r0, r0
207+
; SP-NEXT: lsrs r0, r0, #5
208+
; SP-NEXT: ands.w r0, r0, r8
209+
205210
; DP: vcmp.f64
206211
; DP: movmi r0, #1
207212
; DP: movgt r0, #1

llvm/test/CodeGen/X86/fp128-libcalls-strict.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3443,8 +3443,6 @@ define i64 @cmp_ueq_q(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
34433443
; X86-NEXT: pushl {{[0-9]+}}(%esp)
34443444
; X86-NEXT: calll __unordtf2
34453445
; X86-NEXT: addl $32, %esp
3446-
; X86-NEXT: testl %eax, %eax
3447-
; X86-NEXT: setne %al
34483446
; X86-NEXT: orb %bl, %al
34493447
; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
34503448
; X86-NEXT: leal {{[0-9]+}}(%esp), %ecx
@@ -3526,8 +3524,6 @@ define i64 @cmp_ueq_q(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
35263524
; WIN-X86-NEXT: pushl {{[0-9]+}}(%esp)
35273525
; WIN-X86-NEXT: calll ___unordtf2
35283526
; WIN-X86-NEXT: addl $32, %esp
3529-
; WIN-X86-NEXT: testl %eax, %eax
3530-
; WIN-X86-NEXT: setne %al
35313527
; WIN-X86-NEXT: orb %bl, %al
35323528
; WIN-X86-NEXT: jne LBB39_1
35333529
; WIN-X86-NEXT: # %bb.2:

llvm/test/CodeGen/X86/fpcmp-soft-fp.ll

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,6 @@ entry:
9999
; CHECK: calll __eqdf2
100100
; CHECK: sete
101101
; CHECK: calll __unorddf2
102-
; CHECK: setne
103-
; CHECK: or
104102
; CHECK: retl
105103

106104
define i1 @test11(double %d) #0 {

0 commit comments

Comments
 (0)