Simon Pilgrim e6b85c3027 [DAG] FoldSetCC - add missing icmp(X,undef) -> isTrueWhenEqual case (REAPPLIED)
Followup to D59363 which failed to handle the icmp(X,undef) -> isTrueWhenEqual case - similar to llvm::ConstantFoldCompareInstruction

As discussed on the review, this is affecting some previously reduced test cases, but will also prevent reductions from relying on this inconsistent behaviour in the future.

Reapplied after reversion at e1e3c75c7dad72 with a tweak to the pseudo-probe-peep.ll test

Differential Revision: https://reviews.llvm.org/D158068
2023-09-13 12:33:39 +01:00

43 lines
1.7 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-unknown \
; RUN: -mcpu=pwr6 -ppc-asm-full-reg-names -mattr=-vsx \
; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s
; There is code in the SDAG to expand FMAX/FMIN with fast flags to SELECT_CC.
; On PPC, we had SELECT_CC legalized using Promote for all vector types
; (including the type that they are all promoted to - which caused an infinite
; loop in legalization). This test just ensures that we terminate on such input.
define dso_local void @_ZN1a1bEv(<4 x float> %in) local_unnamed_addr #0 align 2 {
; CHECK-LABEL: _ZN1a1bEv:
; CHECK: # %bb.0:
; CHECK-NEXT: bc 12, 4*cr5+lt, .LBB0_4
; CHECK-NEXT: b .LBB0_1
; CHECK-NEXT: .LBB0_1: # %.preheader
; CHECK-NEXT: b .LBB0_2
; CHECK-NEXT: .LBB0_2:
; CHECK-NEXT: b .LBB0_3
; CHECK-NEXT: .LBB0_3:
; CHECK-NEXT: .LBB0_4:
; CHECK-NEXT: blr
br i1 undef, label %7, label %1
1: ; preds = %1, %0
br i1 undef, label %2, label %1
2: ; preds = %1
%3 = shufflevector <4 x float> %in, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
%4 = call fast <4 x float> @llvm.maxnum.v4f32(<4 x float> %3, <4 x float> zeroinitializer)
%5 = call fast <4 x float> @llvm.maxnum.v4f32(<4 x float> %4, <4 x float> undef)
%6 = extractelement <4 x float> %5, i32 0
br label %7
7: ; preds = %2, %0
%8 = phi float [ %6, %2 ], [ undef, %0 ]
%9 = fcmp fast une float %8, 0.000000e+00
ret void
}
declare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>) #0
attributes #0 = { nounwind optnone noinline }