1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 10:42:39 +01:00
llvm-mirror/test/CodeGen/PowerPC/pr45709.ll
Nemanja Ivanovic 3e2b8f42e3 [PowerPC][NFC] Update test to prevent DCE from causing failures
The test case provided in PR45709 can be simplified by DCE to an
empty function. To prevent this from happening if DCE is run prior
to ISEL in the back end, just add optnone to the function. The
behaviour it is testing for is in the SDAG legalization and is
not sensitive to optnone so the test case still achieves its desired
objective.
2020-05-26 13:37:48 -05:00

66 lines
2.5 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_6
; 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: addis r3, r2, .LCPI0_0@toc@ha
; CHECK-NEXT: addi r3, r3, .LCPI0_0@toc@l
; CHECK-NEXT: lvx v3, 0, r3
; CHECK-NEXT: vperm v2, v2, v2, v3
; CHECK-NEXT: vxor v3, v3, v3
; CHECK-NEXT: addi r3, r1, -48
; CHECK-NEXT: stvx v3, 0, r3
; CHECK-NEXT: addi r3, r1, -32
; CHECK-NEXT: stvx v2, 0, r3
; CHECK-NEXT: lwz r3, -48(r1)
; CHECK-NEXT: lwz r4, -32(r1)
; CHECK-NEXT: cmpw r4, r3
; CHECK-NEXT: bc 12, gt, .LBB0_4
; CHECK-NEXT: b .LBB0_5
; CHECK-NEXT: .LBB0_4:
; CHECK-NEXT: addi r3, r4, 0
; CHECK-NEXT: .LBB0_5:
; CHECK-NEXT: cmpw r3, r3
; CHECK-NEXT: stw r3, -64(r1)
; CHECK-NEXT: addi r3, r1, -64
; CHECK-NEXT: lvx v2, 0, r3
; CHECK-NEXT: addi r3, r1, -16
; CHECK-NEXT: stvx v2, 0, r3
; CHECK-NEXT: .LBB0_6:
; 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 }