mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-25 04:39:51 +00:00
Remove an incorrect overaggressive optimization
(PPC specific). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89496 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1bbf6d1a6f
commit
5ca124691b
@ -443,8 +443,7 @@ SDNode *PPCDAGToDAGISel::SelectBitfieldInsert(SDNode *N) {
|
||||
|
||||
unsigned MB, ME;
|
||||
if (InsertMask && isRunOfOnes(InsertMask, MB, ME)) {
|
||||
SDValue Tmp1, Tmp2, Tmp3;
|
||||
bool DisjointMask = (TargetMask ^ InsertMask) == 0xFFFFFFFF;
|
||||
SDValue Tmp1, Tmp2;
|
||||
|
||||
if ((Op1Opc == ISD::SHL || Op1Opc == ISD::SRL) &&
|
||||
isInt32Immediate(Op1.getOperand(1), Value)) {
|
||||
@ -462,9 +461,8 @@ SDNode *PPCDAGToDAGISel::SelectBitfieldInsert(SDNode *N) {
|
||||
}
|
||||
}
|
||||
|
||||
Tmp3 = (Op0Opc == ISD::AND && DisjointMask) ? Op0.getOperand(0) : Op0;
|
||||
SH &= 31;
|
||||
SDValue Ops[] = { Tmp3, Op1, getI32Imm(SH), getI32Imm(MB),
|
||||
SDValue Ops[] = { Op0, Op1, getI32Imm(SH), getI32Imm(MB),
|
||||
getI32Imm(ME) };
|
||||
return CurDAG->getMachineNode(PPC::RLWIMI, dl, MVT::i32, Ops, 5);
|
||||
}
|
||||
|
28
test/CodeGen/PowerPC/rlwimi-keep-rsh.ll
Normal file
28
test/CodeGen/PowerPC/rlwimi-keep-rsh.ll
Normal file
@ -0,0 +1,28 @@
|
||||
; RUN: llc < %s -march=ppc32 -mtriple=powerpc-apple-darwin | FileCheck %s
|
||||
; Formerly dropped the RHS of %tmp6 when constructing rlwimi.
|
||||
; 7346117
|
||||
|
||||
@foo = external global i32
|
||||
|
||||
define void @xxx(i32 %a, i32 %b, i32 %c, i32 %d) nounwind optsize {
|
||||
; CHECK: _xxx:
|
||||
; CHECK: or
|
||||
; CHECK: and
|
||||
; CHECK: rlwimi
|
||||
entry:
|
||||
%tmp0 = ashr i32 %d, 31
|
||||
%tmp1 = and i32 %tmp0, 255
|
||||
%tmp2 = xor i32 %tmp1, 255
|
||||
%tmp3 = ashr i32 %b, 31
|
||||
%tmp4 = ashr i32 %a, 4
|
||||
%tmp5 = or i32 %tmp3, %tmp4
|
||||
%tmp6 = and i32 %tmp2, %tmp5
|
||||
%tmp7 = shl i32 %c, 8
|
||||
%tmp8 = or i32 %tmp6, %tmp7
|
||||
store i32 %tmp8, i32* @foo, align 4
|
||||
br label %return
|
||||
|
||||
return:
|
||||
ret void
|
||||
; CHECK: blr
|
||||
}
|
Loading…
Reference in New Issue
Block a user