mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-29 14:42:01 +00:00
[ARM64] Never hoist the shift value of a shift instruction.
There is no need to check if we want to hoist the immediate value of an shift instruction. Simply return TCC_Free right away. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206101 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
940b67465d
commit
2aa7106dd6
@ -203,15 +203,19 @@ unsigned ARM64TTI::getIntImmCost(unsigned Opcode, unsigned Idx,
|
||||
case Instruction::SDiv:
|
||||
case Instruction::URem:
|
||||
case Instruction::SRem:
|
||||
case Instruction::Shl:
|
||||
case Instruction::LShr:
|
||||
case Instruction::AShr:
|
||||
case Instruction::And:
|
||||
case Instruction::Or:
|
||||
case Instruction::Xor:
|
||||
case Instruction::ICmp:
|
||||
ImmIdx = 1;
|
||||
break;
|
||||
// Always return TCC_Free for the shift value of a shift instruction.
|
||||
case Instruction::Shl:
|
||||
case Instruction::LShr:
|
||||
case Instruction::AShr:
|
||||
if (Idx == 1)
|
||||
return TCC_Free;
|
||||
break;
|
||||
case Instruction::Trunc:
|
||||
case Instruction::ZExt:
|
||||
case Instruction::SExt:
|
||||
|
@ -16,3 +16,12 @@ define i512 @test2(i512 %a) nounwind {
|
||||
%2 = or i512 %1, 7
|
||||
ret i512 %2
|
||||
}
|
||||
|
||||
; Check that we don't hoist the shift value of a shift instruction.
|
||||
define i512 @test3(i512 %a) nounwind {
|
||||
; CHECK-LABEL: test3
|
||||
; CHECK-NOT: %const = bitcast i512 504 to i512
|
||||
%1 = shl i512 %a, 504
|
||||
%2 = ashr i512 %1, 504
|
||||
ret i512 %2
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user