summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorEli Bendersky <eliben@google.com>2013-02-06 20:43:57 +0000
committerEli Bendersky <eliben@google.com>2013-02-06 20:43:57 +0000
commitef4558abd3e8d56b87bbf4408a831b312685337e (patch)
tree513f3db9e1b39f74d4e2cd916cd4397927ab2a35 /llvm/test
parent5ea04c385fc5b6aeb6404ec9a992ea8e2d149f1e (diff)
downloadbcm5719-llvm-ef4558abd3e8d56b87bbf4408a831b312685337e.tar.gz
bcm5719-llvm-ef4558abd3e8d56b87bbf4408a831b312685337e.zip
This is a follow-up on r174446, now taking Atom processors into
account. Atoms use LEA for updating SP in prologs/epilogs, and the exact LEA opcode depends on the data model. Also reapplying the test case which was added and then reverted (because of Atom failures), this time specifying explicitly the CPU in addition to the triple. The test case now checks all variations (data mode, cpu Atom vs. Core). llvm-svn: 174542
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/X86/stack-update-frame-opcode.ll31
1 files changed, 31 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/stack-update-frame-opcode.ll b/llvm/test/CodeGen/X86/stack-update-frame-opcode.ll
new file mode 100644
index 00000000000..9533ec88215
--- /dev/null
+++ b/llvm/test/CodeGen/X86/stack-update-frame-opcode.ll
@@ -0,0 +1,31 @@
+; RUN: llc -mtriple=x86_64-pc-linux -mcpu=corei7 < %s | FileCheck -check-prefix=CORE_LP64 %s
+; RUN: llc -mtriple=x86_64-pc-linux -mcpu=atom < %s | FileCheck -check-prefix=ATOM_LP64 %s
+; RUN: llc -mtriple=x86_64-pc-linux-gnux32 -mcpu=corei7 < %s | FileCheck -check-prefix=CORE_ILP32 %s
+; RUN: llc -mtriple=x86_64-pc-linux-gnux32 -mcpu=atom < %s | FileCheck -check-prefix=ATOM_ILP32 %s
+
+define i32 @bar(i32 %a) nounwind {
+entry:
+ %arr = alloca [400 x i32], align 16
+
+; There is a 2x2 variation matrix here:
+; Atoms use LEA to update the SP. Opcode bitness depends on data model.
+; Cores use sub/add to update the SP. Opcode titness depends on data model.
+
+; CORE_LP64: subq $1608
+; CORE_ILP32: subl $1608
+; ATOM_LP64: leaq -1608
+; ATOM_ILP32: leal -1608
+
+ %arraydecay = getelementptr inbounds [400 x i32]* %arr, i64 0, i64 0
+ %call = call i32 @foo(i32 %a, i32* %arraydecay) nounwind
+ ret i32 %call
+
+; CORE_LP64: addq $1608
+; CORE_ILP32: addl $1608
+; ATOM_LP64: leaq 1608
+; ATOM_ILP32: leal 1608
+
+}
+
+declare i32 @foo(i32, i32*)
+
OpenPOWER on IntegriCloud