mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 22:04:55 +00:00
InstCombine: Don't try to reorder shuffles where the mask is a ConstantExpr.
We can't analyze the individual values of a vector expression. PR20114. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211581 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f396732d9b
commit
9c88403625
@ -1227,7 +1227,9 @@ Value *InstCombiner::SimplifyVectorOp(BinaryOperator &Inst) {
|
||||
if (isa<ShuffleVectorInst>(RHS)) Shuffle = cast<ShuffleVectorInst>(RHS);
|
||||
if (isa<Constant>(LHS)) C1 = cast<Constant>(LHS);
|
||||
if (isa<Constant>(RHS)) C1 = cast<Constant>(RHS);
|
||||
if (Shuffle && C1 && isa<UndefValue>(Shuffle->getOperand(1)) &&
|
||||
if (Shuffle && C1 &&
|
||||
(isa<ConstantVector>(C1) || isa<ConstantDataVector>(C1)) &&
|
||||
isa<UndefValue>(Shuffle->getOperand(1)) &&
|
||||
Shuffle->getType() == Shuffle->getOperand(0)->getType()) {
|
||||
SmallVector<int, 16> ShMask = Shuffle->getShuffleMask();
|
||||
// Find constant C2 that has property:
|
||||
|
@ -405,3 +405,12 @@ define i32 @pr19737(<4 x i32> %in0) {
|
||||
%rv = extractelement <4 x i32> %and.i, i32 0
|
||||
ret i32 %rv
|
||||
}
|
||||
|
||||
define <4 x i32> @pr20114(<4 x i32> %__mask) {
|
||||
; CHECK-LABEL: @pr20114
|
||||
; CHECK: shufflevector
|
||||
; CHECK: and
|
||||
%mask01.i = shufflevector <4 x i32> %__mask, <4 x i32> undef, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
|
||||
%masked_new.i.i.i = and <4 x i32> bitcast (<2 x i64> <i64 ptrtoint (<4 x i32> (<4 x i32>)* @pr20114 to i64), i64 ptrtoint (<4 x i32> (<4 x i32>)* @pr20114 to i64)> to <4 x i32>), %mask01.i
|
||||
ret <4 x i32> %masked_new.i.i.i
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user