1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01: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.

llvm-svn: 206101
This commit is contained in:
Juergen Ributzka 2014-04-12 02:53:51 +00:00
parent 2cdca434db
commit 23e31a5f36
2 changed files with 16 additions and 3 deletions

View File

@ -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:

View File

@ -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
}