Skip to content

Commit d0c1ea9

Browse files
authored
[InstCombine] Pull unary shuffles through fneg/fabs (#144933)
This canonicalizes fneg/fabs (shuffle X, poison, mask) -> shuffle (fneg/fabs X), posion, mask This undoes part of b331a7e and a8f13db, but keeps the binary shuffle case i.e. shuffle fneg, fneg, mask. By pulling out the shuffle we bring it inline with the same canonicalisation we perform on binary ops and intrinsics, which the original commit acknowledges it goes in the opposite direction. However nowadays VectorCombine is more powerful and can do more optimisations when the shuffle is pulled out, so I think we should revisit this. In particular we get more shuffles folded and can perform scalarization.
1 parent f226852 commit d0c1ea9

File tree

8 files changed

+53
-66
lines changed

8 files changed

+53
-66
lines changed

llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3044,6 +3044,11 @@ Instruction *InstCombinerImpl::visitFNeg(UnaryOperator &I) {
30443044
return replaceInstUsesWith(I, NewCopySign);
30453045
}
30463046

3047+
// fneg (shuffle x, Mask) --> shuffle (fneg x), Mask
3048+
ArrayRef<int> Mask;
3049+
if (match(OneUse, m_Shuffle(m_Value(X), m_Poison(), m_Mask(Mask))))
3050+
return new ShuffleVectorInst(Builder.CreateFNegFMF(X, &I), Mask);
3051+
30473052
return nullptr;
30483053
}
30493054

llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1404,11 +1404,6 @@ InstCombinerImpl::foldShuffledIntrinsicOperands(IntrinsicInst *II) {
14041404
!II->getCalledFunction()->isSpeculatable())
14051405
return nullptr;
14061406

1407-
// fabs is canonicalized to fabs (shuffle ...) in foldShuffleOfUnaryOps, so
1408-
// avoid undoing it.
1409-
if (match(II, m_FAbs(m_Value())))
1410-
return nullptr;
1411-
14121407
Value *X;
14131408
Constant *C;
14141409
ArrayRef<int> Mask;

llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2533,20 +2533,6 @@ static Instruction *foldShuffleOfUnaryOps(ShuffleVectorInst &Shuf,
25332533

25342534
bool IsFNeg = S0->getOpcode() == Instruction::FNeg;
25352535

2536-
// Match 1-input (unary) shuffle.
2537-
// shuffle (fneg/fabs X), Mask --> fneg/fabs (shuffle X, Mask)
2538-
if (S0->hasOneUse() && match(Shuf.getOperand(1), m_Poison())) {
2539-
Value *NewShuf = Builder.CreateShuffleVector(X, Shuf.getShuffleMask());
2540-
if (IsFNeg)
2541-
return UnaryOperator::CreateFNegFMF(NewShuf, S0);
2542-
2543-
Function *FAbs = Intrinsic::getOrInsertDeclaration(
2544-
Shuf.getModule(), Intrinsic::fabs, Shuf.getType());
2545-
CallInst *NewF = CallInst::Create(FAbs, {NewShuf});
2546-
NewF->setFastMathFlags(S0->getFastMathFlags());
2547-
return NewF;
2548-
}
2549-
25502536
// Match 2-input (binary) shuffle.
25512537
auto *S1 = dyn_cast<Instruction>(Shuf.getOperand(1));
25522538
Value *Y;

llvm/test/Transforms/InstCombine/matrix-multiplication-negation.ll

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,10 @@ define <4 x double> @matrix_multiply_two_operands_negated_with_same_size(<2 x do
205205

206206
define <2 x double> @matrix_multiply_two_operands_with_multiple_uses(<6 x double> %a, <3 x double> %b) {
207207
; CHECK-LABEL: @matrix_multiply_two_operands_with_multiple_uses(
208-
; CHECK-NEXT: [[RES:%.*]] = tail call <2 x double> @llvm.matrix.multiply.v2f64.v6f64.v3f64(<6 x double> [[A:%.*]], <3 x double> [[B:%.*]], i32 2, i32 3, i32 1)
209-
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <6 x double> [[A]], <6 x double> poison, <2 x i32> <i32 0, i32 1>
210-
; CHECK-NEXT: [[RES_3:%.*]] = fsub <2 x double> [[RES]], [[TMP1]]
208+
; CHECK-NEXT: [[A_NEG:%.*]] = fneg <6 x double> [[A:%.*]]
209+
; CHECK-NEXT: [[RES:%.*]] = tail call <2 x double> @llvm.matrix.multiply.v2f64.v6f64.v3f64(<6 x double> [[A]], <3 x double> [[B:%.*]], i32 2, i32 3, i32 1)
210+
; CHECK-NEXT: [[RES_2:%.*]] = shufflevector <6 x double> [[A_NEG]], <6 x double> poison, <2 x i32> <i32 0, i32 1>
211+
; CHECK-NEXT: [[RES_3:%.*]] = fadd <2 x double> [[RES_2]], [[RES]]
211212
; CHECK-NEXT: ret <2 x double> [[RES_3]]
212213
;
213214
%a.neg = fneg <6 x double> %a

llvm/test/Transforms/InstCombine/vec_shuffle-inseltpoison.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1278,9 +1278,9 @@ define <2 x float> @fsub_splat_constant1(<2 x float> %x) {
12781278

12791279
define <2 x float> @fneg(<2 x float> %x) {
12801280
; CHECK-LABEL: @fneg(
1281-
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x float> [[X:%.*]], <2 x float> poison, <2 x i32> zeroinitializer
1282-
; CHECK-NEXT: [[R:%.*]] = fneg <2 x float> [[TMP1]]
1283-
; CHECK-NEXT: ret <2 x float> [[R]]
1281+
; CHECK-NEXT: [[R:%.*]] = fneg <2 x float> [[TMP1:%.*]]
1282+
; CHECK-NEXT: [[R1:%.*]] = shufflevector <2 x float> [[R]], <2 x float> poison, <2 x i32> zeroinitializer
1283+
; CHECK-NEXT: ret <2 x float> [[R1]]
12841284
;
12851285
%splat = shufflevector <2 x float> %x, <2 x float> poison, <2 x i32> zeroinitializer
12861286
%r = fsub <2 x float> <float -0.0, float -0.0>, %splat

llvm/test/Transforms/InstCombine/vec_shuffle.ll

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,9 +1382,9 @@ define <2 x float> @fsub_splat_constant1(<2 x float> %x) {
13821382

13831383
define <2 x float> @fneg(<2 x float> %x) {
13841384
; CHECK-LABEL: @fneg(
1385-
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x float> [[X:%.*]], <2 x float> poison, <2 x i32> zeroinitializer
1386-
; CHECK-NEXT: [[R:%.*]] = fneg <2 x float> [[TMP1]]
1387-
; CHECK-NEXT: ret <2 x float> [[R]]
1385+
; CHECK-NEXT: [[R:%.*]] = fneg <2 x float> [[TMP1:%.*]]
1386+
; CHECK-NEXT: [[R1:%.*]] = shufflevector <2 x float> [[R]], <2 x float> poison, <2 x i32> zeroinitializer
1387+
; CHECK-NEXT: ret <2 x float> [[R1]]
13881388
;
13891389
%splat = shufflevector <2 x float> %x, <2 x float> undef, <2 x i32> zeroinitializer
13901390
%r = fsub <2 x float> <float -0.0, float -0.0>, %splat
@@ -1906,9 +1906,9 @@ define <4 x i32> @PR46872(<4 x i32> %x) {
19061906

19071907
define <2 x float> @fabs_unary_shuf(<2 x float> %x) {
19081908
; CHECK-LABEL: @fabs_unary_shuf(
1909-
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x float> [[X:%.*]], <2 x float> poison, <2 x i32> <i32 1, i32 0>
1910-
; CHECK-NEXT: [[R:%.*]] = call nnan nsz <2 x float> @llvm.fabs.v2f32(<2 x float> [[TMP1]])
1911-
; CHECK-NEXT: ret <2 x float> [[R]]
1909+
; CHECK-NEXT: [[R:%.*]] = call nnan nsz <2 x float> @llvm.fabs.v2f32(<2 x float> [[TMP1:%.*]])
1910+
; CHECK-NEXT: [[R1:%.*]] = shufflevector <2 x float> [[R]], <2 x float> poison, <2 x i32> <i32 1, i32 0>
1911+
; CHECK-NEXT: ret <2 x float> [[R1]]
19121912
;
19131913
%nx = call nsz nnan <2 x float> @llvm.fabs.v2f32(<2 x float> %x)
19141914
%r = shufflevector <2 x float> %nx, <2 x float> poison, <2 x i32> <i32 1, i32 0>
@@ -1917,9 +1917,9 @@ define <2 x float> @fabs_unary_shuf(<2 x float> %x) {
19171917

19181918
define <4 x half> @fabs_unary_shuf_widen(<2 x half> %x) {
19191919
; CHECK-LABEL: @fabs_unary_shuf_widen(
1920-
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x half> [[X:%.*]], <2 x half> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 poison>
1921-
; CHECK-NEXT: [[R:%.*]] = call ninf <4 x half> @llvm.fabs.v4f16(<4 x half> [[TMP1]])
1922-
; CHECK-NEXT: ret <4 x half> [[R]]
1920+
; CHECK-NEXT: [[X:%.*]] = call ninf <2 x half> @llvm.fabs.v2f16(<2 x half> [[X1:%.*]])
1921+
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x half> [[X]], <2 x half> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 poison>
1922+
; CHECK-NEXT: ret <4 x half> [[TMP1]]
19231923
;
19241924
%nx = call ninf <2 x half> @llvm.fabs.v2f16(<2 x half> %x)
19251925
%r = shufflevector <2 x half> %nx, <2 x half> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 poison>
@@ -1928,9 +1928,9 @@ define <4 x half> @fabs_unary_shuf_widen(<2 x half> %x) {
19281928

19291929
define <2 x double> @fabs_unary_shuf_narrow(<4 x double> %x) {
19301930
; CHECK-LABEL: @fabs_unary_shuf_narrow(
1931-
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x double> [[X:%.*]], <4 x double> poison, <2 x i32> <i32 3, i32 0>
1932-
; CHECK-NEXT: [[R:%.*]] = call nsz <2 x double> @llvm.fabs.v2f64(<2 x double> [[TMP1]])
1933-
; CHECK-NEXT: ret <2 x double> [[R]]
1931+
; CHECK-NEXT: [[X:%.*]] = call nsz <4 x double> @llvm.fabs.v4f64(<4 x double> [[X1:%.*]])
1932+
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x double> [[X]], <4 x double> poison, <2 x i32> <i32 3, i32 0>
1933+
; CHECK-NEXT: ret <2 x double> [[TMP1]]
19341934
;
19351935
%nx = call nsz <4 x double> @llvm.fabs.v4f64(<4 x double> %x)
19361936
%r = shufflevector <4 x double> %nx, <4 x double> poison, <2 x i32> <i32 3, i32 0>
@@ -2021,9 +2021,9 @@ define <2 x float> @fabs_shuf_use3(<2 x float> %x, <2 x float> %y) {
20212021

20222022
define <2 x float> @fneg_unary_shuf(<2 x float> %x) {
20232023
; CHECK-LABEL: @fneg_unary_shuf(
2024-
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x float> [[X:%.*]], <2 x float> poison, <2 x i32> <i32 1, i32 0>
2025-
; CHECK-NEXT: [[R:%.*]] = fneg nnan nsz <2 x float> [[TMP1]]
2026-
; CHECK-NEXT: ret <2 x float> [[R]]
2024+
; CHECK-NEXT: [[R:%.*]] = fneg nnan nsz <2 x float> [[TMP1:%.*]]
2025+
; CHECK-NEXT: [[R1:%.*]] = shufflevector <2 x float> [[R]], <2 x float> poison, <2 x i32> <i32 1, i32 0>
2026+
; CHECK-NEXT: ret <2 x float> [[R1]]
20272027
;
20282028
%nx = fneg nsz nnan <2 x float> %x
20292029
%r = shufflevector <2 x float> %nx, <2 x float> poison, <2 x i32> <i32 1, i32 0>
@@ -2032,9 +2032,9 @@ define <2 x float> @fneg_unary_shuf(<2 x float> %x) {
20322032

20332033
define <4 x half> @fneg_unary_shuf_widen(<2 x half> %x) {
20342034
; CHECK-LABEL: @fneg_unary_shuf_widen(
2035-
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x half> [[X:%.*]], <2 x half> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 poison>
2036-
; CHECK-NEXT: [[R:%.*]] = fneg ninf <4 x half> [[TMP1]]
2037-
; CHECK-NEXT: ret <4 x half> [[R]]
2035+
; CHECK-NEXT: [[X:%.*]] = fneg ninf <2 x half> [[X1:%.*]]
2036+
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x half> [[X]], <2 x half> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 poison>
2037+
; CHECK-NEXT: ret <4 x half> [[TMP1]]
20382038
;
20392039
%nx = fneg ninf <2 x half> %x
20402040
%r = shufflevector <2 x half> %nx, <2 x half> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 poison>
@@ -2043,9 +2043,9 @@ define <4 x half> @fneg_unary_shuf_widen(<2 x half> %x) {
20432043

20442044
define <2 x double> @fneg_unary_shuf_narrow(<4 x double> %x) {
20452045
; CHECK-LABEL: @fneg_unary_shuf_narrow(
2046-
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x double> [[X:%.*]], <4 x double> poison, <2 x i32> <i32 3, i32 0>
2047-
; CHECK-NEXT: [[R:%.*]] = fneg nsz <2 x double> [[TMP1]]
2048-
; CHECK-NEXT: ret <2 x double> [[R]]
2046+
; CHECK-NEXT: [[X:%.*]] = fneg nsz <4 x double> [[X1:%.*]]
2047+
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x double> [[X]], <4 x double> poison, <2 x i32> <i32 3, i32 0>
2048+
; CHECK-NEXT: ret <2 x double> [[TMP1]]
20492049
;
20502050
%nx = fneg nsz <4 x double> %x
20512051
%r = shufflevector <4 x double> %nx, <4 x double> poison, <2 x i32> <i32 3, i32 0>

llvm/test/Transforms/SLPVectorizer/X86/alternate-cast-inseltpoison.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,19 +132,19 @@ define <8 x i32> @fptosi_fptoui(<8 x float> %a) {
132132

133133
define <8 x float> @fneg_fabs(<8 x float> %a) {
134134
; SSE2-LABEL: @fneg_fabs(
135-
; SSE2-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[A:%.*]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
136-
; SSE2-NEXT: [[TMP2:%.*]] = shufflevector <8 x float> [[A]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
137-
; SSE2-NEXT: [[TMP3:%.*]] = fneg <4 x float> [[TMP1]]
138-
; SSE2-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.fabs.v4f32(<4 x float> [[TMP2]])
139-
; SSE2-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <4 x float> [[TMP3]], <4 x float> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
135+
; SSE2-NEXT: [[A:%.*]] = fneg <8 x float> [[A1:%.*]]
136+
; SSE2-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[A]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
137+
; SSE2-NEXT: [[TMP3:%.*]] = call <8 x float> @llvm.fabs.v8f32(<8 x float> [[A1]])
138+
; SSE2-NEXT: [[TMP4:%.*]] = shufflevector <8 x float> [[TMP3]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
139+
; SSE2-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <4 x float> [[TMP1]], <4 x float> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
140140
; SSE2-NEXT: ret <8 x float> [[DOTUNCASTED]]
141141
;
142142
; SLM-LABEL: @fneg_fabs(
143-
; SLM-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[A:%.*]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
144-
; SLM-NEXT: [[TMP2:%.*]] = shufflevector <8 x float> [[A]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
145-
; SLM-NEXT: [[TMP3:%.*]] = fneg <4 x float> [[TMP1]]
146-
; SLM-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.fabs.v4f32(<4 x float> [[TMP2]])
147-
; SLM-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <4 x float> [[TMP3]], <4 x float> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
143+
; SLM-NEXT: [[A:%.*]] = fneg <8 x float> [[A1:%.*]]
144+
; SLM-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[A]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
145+
; SLM-NEXT: [[TMP3:%.*]] = call <8 x float> @llvm.fabs.v8f32(<8 x float> [[A1]])
146+
; SLM-NEXT: [[TMP4:%.*]] = shufflevector <8 x float> [[TMP3]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
147+
; SLM-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <4 x float> [[TMP1]], <4 x float> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
148148
; SLM-NEXT: ret <8 x float> [[DOTUNCASTED]]
149149
;
150150
; AVX-LABEL: @fneg_fabs(

llvm/test/Transforms/SLPVectorizer/X86/alternate-cast.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,19 +132,19 @@ define <8 x i32> @fptosi_fptoui(<8 x float> %a) {
132132

133133
define <8 x float> @fneg_fabs(<8 x float> %a) {
134134
; SSE2-LABEL: @fneg_fabs(
135-
; SSE2-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[A:%.*]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
136-
; SSE2-NEXT: [[TMP2:%.*]] = shufflevector <8 x float> [[A]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
137-
; SSE2-NEXT: [[TMP3:%.*]] = fneg <4 x float> [[TMP1]]
138-
; SSE2-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.fabs.v4f32(<4 x float> [[TMP2]])
139-
; SSE2-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <4 x float> [[TMP3]], <4 x float> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
135+
; SSE2-NEXT: [[A:%.*]] = fneg <8 x float> [[A1:%.*]]
136+
; SSE2-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[A]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
137+
; SSE2-NEXT: [[TMP3:%.*]] = call <8 x float> @llvm.fabs.v8f32(<8 x float> [[A1]])
138+
; SSE2-NEXT: [[TMP4:%.*]] = shufflevector <8 x float> [[TMP3]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
139+
; SSE2-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <4 x float> [[TMP1]], <4 x float> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
140140
; SSE2-NEXT: ret <8 x float> [[DOTUNCASTED]]
141141
;
142142
; SLM-LABEL: @fneg_fabs(
143-
; SLM-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[A:%.*]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
144-
; SLM-NEXT: [[TMP2:%.*]] = shufflevector <8 x float> [[A]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
145-
; SLM-NEXT: [[TMP3:%.*]] = fneg <4 x float> [[TMP1]]
146-
; SLM-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.fabs.v4f32(<4 x float> [[TMP2]])
147-
; SLM-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <4 x float> [[TMP3]], <4 x float> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
143+
; SLM-NEXT: [[A:%.*]] = fneg <8 x float> [[A1:%.*]]
144+
; SLM-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[A]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
145+
; SLM-NEXT: [[TMP3:%.*]] = call <8 x float> @llvm.fabs.v8f32(<8 x float> [[A1]])
146+
; SLM-NEXT: [[TMP4:%.*]] = shufflevector <8 x float> [[TMP3]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
147+
; SLM-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <4 x float> [[TMP1]], <4 x float> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
148148
; SLM-NEXT: ret <8 x float> [[DOTUNCASTED]]
149149
;
150150
; AVX-LABEL: @fneg_fabs(

0 commit comments

Comments
 (0)