mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-27 07:12:06 +00:00
InstCombine: Don't try to use aggregate elements of ConstantExprs.
PR18600. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200028 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a9699d475f
commit
d7053be532
@ -25,12 +25,14 @@ static bool CheapToScalarize(Value *V, bool isConstant) {
|
||||
if (isConstant) return true;
|
||||
|
||||
// If all elts are the same, we can extract it and use any of the values.
|
||||
Constant *Op0 = C->getAggregateElement(0U);
|
||||
for (unsigned i = 1, e = V->getType()->getVectorNumElements(); i != e; ++i)
|
||||
if (Constant *Op0 = C->getAggregateElement(0U)) {
|
||||
for (unsigned i = 1, e = V->getType()->getVectorNumElements(); i != e;
|
||||
++i)
|
||||
if (C->getAggregateElement(i) != Op0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Instruction *I = dyn_cast<Instruction>(V);
|
||||
if (!I) return false;
|
||||
|
||||
|
@ -16,3 +16,11 @@ define void @test (float %b, <8 x float> * %p) {
|
||||
ret void
|
||||
}
|
||||
|
||||
; PR18600
|
||||
define i32 @test2(i32 %i) {
|
||||
%e = extractelement <4 x i32> bitcast (<2 x i64> <i64 1, i64 2> to <4 x i32>), i32 %i
|
||||
ret i32 %e
|
||||
|
||||
; CHECK-LABEL: @test2
|
||||
; CHECK: extractelement
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user