summaryrefslogtreecommitdiff
path: root/test/CodeGen/PowerPC/atomic-1.ll
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2008-07-16 08:09:48 +0000
committerDuncan Sands <baldrick@free.fr>2008-07-16 08:09:48 +0000
commit17991c3234aeeb0475feb9d30e4bc37ffadd9338 (patch)
tree543e027d2bab0eb46fdcc18e82d8fa1e20926dbe /test/CodeGen/PowerPC/atomic-1.ll
parentbe8efa54b6253e0c3c641c007e791e9d1a12bb47 (diff)
downloadllvm-17991c3234aeeb0475feb9d30e4bc37ffadd9338.tar.gz
llvm-17991c3234aeeb0475feb9d30e4bc37ffadd9338.tar.bz2
llvm-17991c3234aeeb0475feb9d30e4bc37ffadd9338.tar.xz
The atomic.cmp.swap promotion logic is wrong: it
simply does the atomic.cmp.swap on the larger type, which means it blows away whatever is sitting in the bytes just after the memory location, i.e. causes a buffer overflow. This really requires target specific code, which is why LegalizeTypes doesn't try to handle this case generically. The existing (wrong) code in LegalizeDAG will go away automatically once the type legalization code is removed from LegalizeDAG so I'm leaving it there for the moment. Meanwhile, don't test for this feature. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53669 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/PowerPC/atomic-1.ll')
-rw-r--r--test/CodeGen/PowerPC/atomic-1.ll10
1 files changed, 2 insertions, 8 deletions
diff --git a/test/CodeGen/PowerPC/atomic-1.ll b/test/CodeGen/PowerPC/atomic-1.ll
index e588b2fd11..ea5a5a59ba 100644
--- a/test/CodeGen/PowerPC/atomic-1.ll
+++ b/test/CodeGen/PowerPC/atomic-1.ll
@@ -1,5 +1,5 @@
-; RUN: llvm-as < %s | llc -march=ppc32 | grep lwarx | count 4
-; RUN: llvm-as < %s | llc -march=ppc32 | grep stwcx. | count 4
+; RUN: llvm-as < %s | llc -march=ppc32 | grep lwarx | count 3
+; RUN: llvm-as < %s | llc -march=ppc32 | grep stwcx. | count 3
define i32 @exchange_and_add(i32* %mem, i32 %val) nounwind {
%tmp = call i32 @llvm.atomic.load.add.i32( i32* %mem, i32 %val )
@@ -11,11 +11,6 @@ define i32 @exchange_and_cmp(i32* %mem) nounwind {
ret i32 %tmp
}
-define i16 @exchange_and_cmp16(i16* %mem) nounwind {
- %tmp = call i16 @llvm.atomic.cmp.swap.i16( i16* %mem, i16 0, i16 1 )
- ret i16 %tmp
-}
-
define i32 @exchange(i32* %mem, i32 %val) nounwind {
%tmp = call i32 @llvm.atomic.swap.i32( i32* %mem, i32 1 )
ret i32 %tmp
@@ -23,5 +18,4 @@ define i32 @exchange(i32* %mem, i32 %val) nounwind {
declare i32 @llvm.atomic.load.add.i32(i32*, i32) nounwind
declare i32 @llvm.atomic.cmp.swap.i32(i32*, i32, i32) nounwind
-declare i16 @llvm.atomic.cmp.swap.i16(i16*, i16, i16) nounwind
declare i32 @llvm.atomic.swap.i32(i32*, i32) nounwind