[llvm-commits] [llvm] r53669 - /llvm/trunk/test/CodeGen/PowerPC/atomic-1.ll

Duncan Sands baldrick at free.fr
Wed Jul 16 01:09:49 PDT 2008


Author: baldrick
Date: Wed Jul 16 03:09:48 2008
New Revision: 53669

URL: http://llvm.org/viewvc/llvm-project?rev=53669&view=rev
Log:
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.

Modified:
    llvm/trunk/test/CodeGen/PowerPC/atomic-1.ll

Modified: llvm/trunk/test/CodeGen/PowerPC/atomic-1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/atomic-1.ll?rev=53669&r1=53668&r2=53669&view=diff

==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/atomic-1.ll (original)
+++ llvm/trunk/test/CodeGen/PowerPC/atomic-1.ll Wed Jul 16 03:09:48 2008
@@ -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 @@
 	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 @@
 
 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 





More information about the llvm-commits mailing list