fixes https://github.com/llvm/llvm-project/issues/129432 Recognize expansion sequence of negate where it isn't legal in order to select multiply-subtract.
37 lines
1.4 KiB
LLVM
37 lines
1.4 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
|
; RUN: llc -verify-machineinstrs < %s -mcpu=pwr5 -mtriple=ppc32-- -mattr=+altivec | FileCheck %s
|
|
|
|
define dso_local <4 x float> @intrinsic(<4 x float> noundef %a, <4 x float> noundef %b, <4 x float> noundef %c) local_unnamed_addr {
|
|
; CHECK-LABEL: intrinsic:
|
|
; CHECK: # %bb.0: # %entry
|
|
; CHECK-NEXT: vnmsubfp 2, 2, 3, 4
|
|
; CHECK-NEXT: blr
|
|
entry:
|
|
%0 = tail call <4 x float> @llvm.ppc.altivec.vnmsubfp(<4 x float> %a, <4 x float> %b, <4 x float> %c)
|
|
ret <4 x float> %0
|
|
}
|
|
|
|
define <4 x float> @manual_llvm_fma(<4 x float> %a, <4 x float> %b, <4 x float> %c) unnamed_addr {
|
|
; CHECK-LABEL: manual_llvm_fma:
|
|
; CHECK: # %bb.0: # %start
|
|
; CHECK-NEXT: vnmsubfp 2, 2, 3, 4
|
|
; CHECK-NEXT: blr
|
|
start:
|
|
%0 = fneg <4 x float> %c
|
|
%1 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %0)
|
|
%2 = fneg <4 x float> %1
|
|
ret <4 x float> %2
|
|
}
|
|
|
|
define dso_local <4 x float> @manual_vmaddfp(<4 x float> noundef %a, <4 x float> noundef %b, <4 x float> noundef %c) local_unnamed_addr {
|
|
; CHECK-LABEL: manual_vmaddfp:
|
|
; CHECK: # %bb.0: # %entry
|
|
; CHECK-NEXT: vnmsubfp 2, 2, 3, 4
|
|
; CHECK-NEXT: blr
|
|
entry:
|
|
%fneg.i3 = fneg <4 x float> %c
|
|
%0 = tail call <4 x float> @llvm.ppc.altivec.vmaddfp(<4 x float> %a, <4 x float> %b, <4 x float> %fneg.i3)
|
|
%fneg.i = fneg <4 x float> %0
|
|
ret <4 x float> %fneg.i
|
|
}
|