summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/PowerPC/coalesce-ext.ll
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2012-06-19 21:14:34 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2012-06-19 21:14:34 +0000
commit0f855e42630306e01cf8873b9eb965b7ea6c09fd (patch)
tree947ac5cc76fb010a0f5c75bf038c833712fe39a0 /llvm/test/CodeGen/PowerPC/coalesce-ext.ll
parent8eb9905a7c95630114ca750cb85e34221527fb7a (diff)
downloadbcm5719-llvm-0f855e42630306e01cf8873b9eb965b7ea6c09fd.tar.gz
bcm5719-llvm-0f855e42630306e01cf8873b9eb965b7ea6c09fd.zip
Implement PPCInstrInfo::isCoalescableExtInstr().
The PPC::EXTSW instruction preserves the low 32 bits of its input, just like some of the x86 instructions. Use it to reduce register pressure when the low 32 bits have multiple uses. This requires a small change to PeepholeOptimizer since EXTSW takes a 64-bit input register. This is related to PR5997. llvm-svn: 158743
Diffstat (limited to 'llvm/test/CodeGen/PowerPC/coalesce-ext.ll')
-rw-r--r--llvm/test/CodeGen/PowerPC/coalesce-ext.ll17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/coalesce-ext.ll b/llvm/test/CodeGen/PowerPC/coalesce-ext.ll
new file mode 100644
index 00000000000..08a2cc773fd
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/coalesce-ext.ll
@@ -0,0 +1,17 @@
+; RUN: llc -march=ppc64 < %s | FileCheck %s
+; Check that the peephole optimizer knows about sext and zext instructions.
+; CHECK: test1sext
+define i32 @test1sext(i64 %A, i64 %B, i32* %P, i64 *%P2) nounwind {
+ %C = add i64 %A, %B
+ ; CHECK: add [[SUM:r[0-9]+]], r3, r4
+ %D = trunc i64 %C to i32
+ %E = shl i64 %C, 32
+ %F = ashr i64 %E, 32
+ ; CHECK: extsw [[EXT:r[0-9]+]], [[SUM]]
+ store volatile i64 %F, i64 *%P2
+ ; CHECK: std [[EXT]]
+ store volatile i32 %D, i32* %P
+ ; Reuse low bits of extended register, don't extend live range of SUM.
+ ; CHECK: stw [[EXT]]
+ ret i32 %D
+}
OpenPOWER on IntegriCloud