Skip to content

Commit b2091fb

Browse files
committed
Remove constant folds
1 parent 5cbdfe8 commit b2091fb

File tree

10 files changed

+60
-115
lines changed

10 files changed

+60
-115
lines changed

llvm/include/llvm/Analysis/InstSimplifyFolder.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,6 @@ class LLVM_ABI InstSimplifyFolder final : public IRBuilderFolder {
125125
dyn_cast_if_present<CallBase>(FMFSource));
126126
}
127127

128-
Value *FoldVectorInterleave(ArrayRef<Value *> Ops) const override {
129-
return ConstFolder.FoldVectorInterleave(Ops);
130-
}
131-
132128
//===--------------------------------------------------------------------===//
133129
// Cast/Conversion Operators
134130
//===--------------------------------------------------------------------===//

llvm/include/llvm/Analysis/TargetFolder.h

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -189,24 +189,6 @@ class LLVM_ABI TargetFolder final : public IRBuilderFolder {
189189
return nullptr;
190190
}
191191

192-
Value *FoldVectorInterleave(ArrayRef<Value *> Ops) const override {
193-
// Check to see if all operands are the same.
194-
for (unsigned I = 1; I < Ops.size(); I++) {
195-
if (Ops[I] != Ops[0])
196-
return nullptr;
197-
}
198-
199-
// Is this just a large splat?
200-
if (auto *C = dyn_cast<Constant>(Ops[0])) {
201-
if (auto *V = C->getSplatValue()) {
202-
auto *SubvecTy = cast<VectorType>(Ops[0]->getType());
203-
return ConstantVector::getSplat(
204-
SubvecTy->getElementCount() * Ops.size(), V);
205-
}
206-
}
207-
return nullptr;
208-
}
209-
210192
Value *FoldBinaryIntrinsic(Intrinsic::ID ID, Value *LHS, Value *RHS, Type *Ty,
211193
Instruction *FMFSource) const override {
212194
auto *C1 = dyn_cast<Constant>(LHS);

llvm/include/llvm/IR/ConstantFolder.h

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -181,24 +181,6 @@ class LLVM_ABI ConstantFolder final : public IRBuilderFolder {
181181
return nullptr;
182182
}
183183

184-
Value *FoldVectorInterleave(ArrayRef<Value *> Ops) const override {
185-
// Check to see if all operands are the same.
186-
for (unsigned I = 1; I < Ops.size(); I++) {
187-
if (Ops[I] != Ops[0])
188-
return nullptr;
189-
}
190-
191-
// Is this just a large splat?
192-
if (auto *C = dyn_cast<Constant>(Ops[0])) {
193-
if (auto *V = C->getSplatValue()) {
194-
auto *SubvecTy = cast<VectorType>(Ops[0]->getType());
195-
return ConstantVector::getSplat(
196-
SubvecTy->getElementCount() * Ops.size(), V);
197-
}
198-
}
199-
return nullptr;
200-
}
201-
202184
Value *FoldBinaryIntrinsic(Intrinsic::ID ID, Value *LHS, Value *RHS, Type *Ty,
203185
Instruction *FMFSource) const override {
204186
// Use TargetFolder or InstSimplifyFolder instead.

llvm/include/llvm/IR/IRBuilderFolder.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,6 @@ class LLVM_ABI IRBuilderFolder {
7575
virtual Value *FoldCast(Instruction::CastOps Op, Value *V,
7676
Type *DestTy) const = 0;
7777

78-
virtual Value *FoldVectorInterleave(ArrayRef<Value *> Ops) const = 0;
79-
8078
virtual Value *
8179
FoldBinaryIntrinsic(Intrinsic::ID ID, Value *LHS, Value *RHS, Type *Ty,
8280
Instruction *FMFSource = nullptr) const = 0;

llvm/include/llvm/IR/NoFolder.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,6 @@ class LLVM_ABI NoFolder final : public IRBuilderFolder {
118118
return nullptr;
119119
}
120120

121-
Value *FoldVectorInterleave(ArrayRef<Value *> Ops) const override {
122-
return nullptr;
123-
}
124-
125121
//===--------------------------------------------------------------------===//
126122
// Cast/Conversion Operators
127123
//===--------------------------------------------------------------------===//

llvm/lib/Analysis/ConstantFolding.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1641,19 +1641,7 @@ bool llvm::canConstantFoldCallTo(const CallBase *Call, const Function *F) {
16411641
case Intrinsic::vector_extract:
16421642
case Intrinsic::vector_insert:
16431643
case Intrinsic::vector_interleave2:
1644-
case Intrinsic::vector_interleave3:
1645-
case Intrinsic::vector_interleave4:
1646-
case Intrinsic::vector_interleave5:
1647-
case Intrinsic::vector_interleave6:
1648-
case Intrinsic::vector_interleave7:
1649-
case Intrinsic::vector_interleave8:
16501644
case Intrinsic::vector_deinterleave2:
1651-
case Intrinsic::vector_deinterleave3:
1652-
case Intrinsic::vector_deinterleave4:
1653-
case Intrinsic::vector_deinterleave5:
1654-
case Intrinsic::vector_deinterleave6:
1655-
case Intrinsic::vector_deinterleave7:
1656-
case Intrinsic::vector_deinterleave8:
16571645
// Target intrinsics
16581646
case Intrinsic::amdgcn_perm:
16591647
case Intrinsic::amdgcn_wave_reduce_umin:

llvm/lib/IR/IRBuilder.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
#include "llvm/IR/IRBuilder.h"
1515
#include "llvm/ADT/ArrayRef.h"
16-
#include "llvm/Analysis/VectorUtils.h"
1716
#include "llvm/IR/Constant.h"
1817
#include "llvm/IR/Constants.h"
1918
#include "llvm/IR/DerivedTypes.h"
@@ -1160,9 +1159,6 @@ Value *IRBuilderBase::CreateVectorInterleave(ArrayRef<Value *> Ops,
11601159
}
11611160
#endif
11621161

1163-
if (auto *V = Folder.FoldVectorInterleave(Ops))
1164-
return V;
1165-
11661162
unsigned IID = Intrinsic::getInterleaveIntrinsicID(Ops.size());
11671163
auto *SubvecTy = cast<VectorType>(Ops[0]->getType());
11681164
Type *DestTy = VectorType::get(SubvecTy->getElementType(),

llvm/test/CodeGen/AArch64/complex-deinterleaving-opt-crash.ll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ define void @reprocessing_crash() #0 {
99
; CHECK-LABEL: define void @reprocessing_crash(
1010
; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
1111
; CHECK-NEXT: [[ENTRY:.*]]:
12+
; CHECK-NEXT: [[TMP0:%.*]] = call <vscale x 4 x double> @llvm.vector.interleave2.nxv4f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x double> zeroinitializer)
1213
; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
1314
; CHECK: [[VECTOR_BODY]]:
14-
; CHECK-NEXT: [[TMP1:%.*]] = phi <vscale x 4 x double> [ zeroinitializer, %[[ENTRY]] ], [ [[TMP2:%.*]], %[[VECTOR_BODY]] ]
15+
; CHECK-NEXT: [[TMP1:%.*]] = phi <vscale x 4 x double> [ [[TMP0]], %[[ENTRY]] ], [ [[TMP2:%.*]], %[[VECTOR_BODY]] ]
1516
; CHECK-NEXT: [[TMP2]] = fsub <vscale x 4 x double> [[TMP1]], zeroinitializer
1617
; CHECK-NEXT: br i1 false, label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]]
1718
; CHECK: [[MIDDLE_BLOCK]]:
@@ -47,10 +48,11 @@ define double @test_fp_single_reduction(i1 %c) #2 {
4748
; CHECK-LABEL: define double @test_fp_single_reduction(
4849
; CHECK-SAME: i1 [[C:%.*]]) #[[ATTR1:[0-9]+]] {
4950
; CHECK-NEXT: [[ENTRY:.*]]:
51+
; CHECK-NEXT: [[TMP0:%.*]] = call <8 x double> @llvm.vector.interleave2.v8f64(<4 x double> zeroinitializer, <4 x double> zeroinitializer)
5052
; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
5153
; CHECK: [[VECTOR_BODY]]:
5254
; CHECK-NEXT: [[VEC_PHI218:%.*]] = phi <4 x double> [ zeroinitializer, %[[ENTRY]] ], [ [[TMP2:%.*]], %[[VECTOR_BODY]] ]
53-
; CHECK-NEXT: [[TMP1:%.*]] = phi <8 x double> [ zeroinitializer, %[[ENTRY]] ], [ [[TMP3:%.*]], %[[VECTOR_BODY]] ]
55+
; CHECK-NEXT: [[TMP1:%.*]] = phi <8 x double> [ [[TMP0]], %[[ENTRY]] ], [ [[TMP3:%.*]], %[[VECTOR_BODY]] ]
5456
; CHECK-NEXT: [[STRIDED_VEC:%.*]] = shufflevector <8 x double> zeroinitializer, <8 x double> zeroinitializer, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
5557
; CHECK-NEXT: [[TMP2]] = fadd <4 x double> [[VEC_PHI218]], [[STRIDED_VEC]]
5658
; CHECK-NEXT: [[TMP3]] = fadd <8 x double> [[TMP1]], zeroinitializer

llvm/test/CodeGen/AArch64/complex-deinterleaving-reductions-predicated-scalable.ll

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,20 @@ target triple = "aarch64"
1414
define %"class.std::complex" @complex_mul_v2f64(ptr %a, ptr %b) {
1515
; CHECK-LABEL: complex_mul_v2f64:
1616
; CHECK: // %bb.0: // %entry
17-
; CHECK-NEXT: movi v0.2d, #0000000000000000
1817
; CHECK-NEXT: movi v1.2d, #0000000000000000
1918
; CHECK-NEXT: mov w8, #100 // =0x64
20-
; CHECK-NEXT: whilelo p1.d, xzr, x8
2119
; CHECK-NEXT: cntd x9
20+
; CHECK-NEXT: whilelo p1.d, xzr, x8
2221
; CHECK-NEXT: rdvl x10, #2
23-
; CHECK-NEXT: ptrue p0.d
2422
; CHECK-NEXT: mov x11, x9
23+
; CHECK-NEXT: ptrue p0.d
24+
; CHECK-NEXT: zip2 z0.d, z1.d, z1.d
25+
; CHECK-NEXT: zip1 z1.d, z1.d, z1.d
2526
; CHECK-NEXT: .LBB0_1: // %vector.body
2627
; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
2728
; CHECK-NEXT: zip2 p2.d, p1.d, p1.d
28-
; CHECK-NEXT: mov z6.d, z0.d
29-
; CHECK-NEXT: mov z7.d, z1.d
29+
; CHECK-NEXT: mov z6.d, z1.d
30+
; CHECK-NEXT: mov z7.d, z0.d
3031
; CHECK-NEXT: zip1 p1.d, p1.d, p1.d
3132
; CHECK-NEXT: ld1d { z2.d }, p2/z, [x0, #1, mul vl]
3233
; CHECK-NEXT: ld1d { z4.d }, p2/z, [x1, #1, mul vl]
@@ -38,14 +39,14 @@ define %"class.std::complex" @complex_mul_v2f64(ptr %a, ptr %b) {
3839
; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #0
3940
; CHECK-NEXT: fcmla z7.d, p0/m, z4.d, z2.d, #90
4041
; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #90
41-
; CHECK-NEXT: mov z1.d, p2/m, z7.d
42-
; CHECK-NEXT: mov z0.d, p1/m, z6.d
42+
; CHECK-NEXT: mov z0.d, p2/m, z7.d
43+
; CHECK-NEXT: mov z1.d, p1/m, z6.d
4344
; CHECK-NEXT: whilelo p1.d, x11, x8
4445
; CHECK-NEXT: add x11, x11, x9
4546
; CHECK-NEXT: b.mi .LBB0_1
4647
; CHECK-NEXT: // %bb.2: // %exit.block
47-
; CHECK-NEXT: uzp1 z2.d, z0.d, z1.d
48-
; CHECK-NEXT: uzp2 z1.d, z0.d, z1.d
48+
; CHECK-NEXT: uzp1 z2.d, z1.d, z0.d
49+
; CHECK-NEXT: uzp2 z1.d, z1.d, z0.d
4950
; CHECK-NEXT: faddv d0, p0, z2.d
5051
; CHECK-NEXT: faddv d1, p0, z1.d
5152
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
@@ -110,20 +111,21 @@ exit.block: ; preds = %vector.body
110111
define %"class.std::complex" @complex_mul_predicated_v2f64(ptr %a, ptr %b, ptr %cond) {
111112
; CHECK-LABEL: complex_mul_predicated_v2f64:
112113
; CHECK: // %bb.0: // %entry
113-
; CHECK-NEXT: movi v0.2d, #0000000000000000
114114
; CHECK-NEXT: movi v1.2d, #0000000000000000
115115
; CHECK-NEXT: cntd x9
116-
; CHECK-NEXT: neg x10, x9
117116
; CHECK-NEXT: mov w11, #100 // =0x64
117+
; CHECK-NEXT: neg x10, x9
118118
; CHECK-NEXT: ptrue p0.d
119119
; CHECK-NEXT: mov x8, xzr
120120
; CHECK-NEXT: and x10, x10, x11
121121
; CHECK-NEXT: rdvl x11, #2
122+
; CHECK-NEXT: zip2 z0.d, z1.d, z1.d
123+
; CHECK-NEXT: zip1 z1.d, z1.d, z1.d
122124
; CHECK-NEXT: .LBB1_1: // %vector.body
123125
; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
124126
; CHECK-NEXT: ld1w { z2.d }, p0/z, [x2, x8, lsl #2]
125-
; CHECK-NEXT: mov z6.d, z0.d
126-
; CHECK-NEXT: mov z7.d, z1.d
127+
; CHECK-NEXT: mov z6.d, z1.d
128+
; CHECK-NEXT: mov z7.d, z0.d
127129
; CHECK-NEXT: add x8, x8, x9
128130
; CHECK-NEXT: cmpne p1.d, p0/z, z2.d, #0
129131
; CHECK-NEXT: cmp x10, x8
@@ -139,12 +141,12 @@ define %"class.std::complex" @complex_mul_predicated_v2f64(ptr %a, ptr %b, ptr %
139141
; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #0
140142
; CHECK-NEXT: fcmla z7.d, p0/m, z4.d, z2.d, #90
141143
; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #90
142-
; CHECK-NEXT: mov z1.d, p2/m, z7.d
143-
; CHECK-NEXT: mov z0.d, p1/m, z6.d
144+
; CHECK-NEXT: mov z0.d, p2/m, z7.d
145+
; CHECK-NEXT: mov z1.d, p1/m, z6.d
144146
; CHECK-NEXT: b.ne .LBB1_1
145147
; CHECK-NEXT: // %bb.2: // %exit.block
146-
; CHECK-NEXT: uzp1 z2.d, z0.d, z1.d
147-
; CHECK-NEXT: uzp2 z1.d, z0.d, z1.d
148+
; CHECK-NEXT: uzp1 z2.d, z1.d, z0.d
149+
; CHECK-NEXT: uzp2 z1.d, z1.d, z0.d
148150
; CHECK-NEXT: faddv d0, p0, z2.d
149151
; CHECK-NEXT: faddv d1, p0, z1.d
150152
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
@@ -211,20 +213,21 @@ exit.block: ; preds = %vector.body
211213
define %"class.std::complex" @complex_mul_predicated_x2_v2f64(ptr %a, ptr %b, ptr %cond) {
212214
; CHECK-LABEL: complex_mul_predicated_x2_v2f64:
213215
; CHECK: // %bb.0: // %entry
214-
; CHECK-NEXT: movi v0.2d, #0000000000000000
215216
; CHECK-NEXT: movi v1.2d, #0000000000000000
216217
; CHECK-NEXT: mov w8, #100 // =0x64
217-
; CHECK-NEXT: whilelo p1.d, xzr, x8
218218
; CHECK-NEXT: cntd x9
219+
; CHECK-NEXT: whilelo p1.d, xzr, x8
219220
; CHECK-NEXT: rdvl x10, #2
220-
; CHECK-NEXT: ptrue p0.d
221221
; CHECK-NEXT: cnth x11
222+
; CHECK-NEXT: ptrue p0.d
222223
; CHECK-NEXT: mov x12, x9
224+
; CHECK-NEXT: zip2 z0.d, z1.d, z1.d
225+
; CHECK-NEXT: zip1 z1.d, z1.d, z1.d
223226
; CHECK-NEXT: .LBB2_1: // %vector.body
224227
; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
225228
; CHECK-NEXT: ld1w { z2.d }, p1/z, [x2]
226-
; CHECK-NEXT: mov z6.d, z0.d
227-
; CHECK-NEXT: mov z7.d, z1.d
229+
; CHECK-NEXT: mov z6.d, z1.d
230+
; CHECK-NEXT: mov z7.d, z0.d
228231
; CHECK-NEXT: add x2, x2, x11
229232
; CHECK-NEXT: and z2.d, z2.d, #0xffffffff
230233
; CHECK-NEXT: cmpne p1.d, p1/z, z2.d, #0
@@ -240,14 +243,14 @@ define %"class.std::complex" @complex_mul_predicated_x2_v2f64(ptr %a, ptr %b, pt
240243
; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #0
241244
; CHECK-NEXT: fcmla z7.d, p0/m, z4.d, z2.d, #90
242245
; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #90
243-
; CHECK-NEXT: mov z1.d, p2/m, z7.d
244-
; CHECK-NEXT: mov z0.d, p1/m, z6.d
246+
; CHECK-NEXT: mov z0.d, p2/m, z7.d
247+
; CHECK-NEXT: mov z1.d, p1/m, z6.d
245248
; CHECK-NEXT: whilelo p1.d, x12, x8
246249
; CHECK-NEXT: add x12, x12, x9
247250
; CHECK-NEXT: b.mi .LBB2_1
248251
; CHECK-NEXT: // %bb.2: // %exit.block
249-
; CHECK-NEXT: uzp1 z2.d, z0.d, z1.d
250-
; CHECK-NEXT: uzp2 z1.d, z0.d, z1.d
252+
; CHECK-NEXT: uzp1 z2.d, z1.d, z0.d
253+
; CHECK-NEXT: uzp2 z1.d, z1.d, z0.d
251254
; CHECK-NEXT: faddv d0, p0, z2.d
252255
; CHECK-NEXT: faddv d1, p0, z1.d
253256
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0

0 commit comments

Comments
 (0)