[PATCH] D11783: Fix an alignment error in `llvm::expandAtomicRMWToCmpXchg`.
Richard Diamond
wichard at vitalitystudios.com
Wed Aug 5 14:46:35 PDT 2015
DiamondLovesYou created this revision.
DiamondLovesYou added a reviewer: jfb.
DiamondLovesYou added a subscriber: llvm-commits.
DiamondLovesYou set the repository for this revision to rL LLVM.
Divide the primitive size in bits by eight so the initial load's alignment is in bytes as expected. Tested with the included unit test.
Repository:
rL LLVM
http://reviews.llvm.org/D11783
Files:
lib/CodeGen/AtomicExpandPass.cpp
test/Transforms/AtomicExpand/expand-atomic-rmw-initial-load.ll
Index: test/Transforms/AtomicExpand/expand-atomic-rmw-initial-load.ll
===================================================================
--- /dev/null
+++ test/Transforms/AtomicExpand/expand-atomic-rmw-initial-load.ll
@@ -0,0 +1,8 @@
+; RUN: opt -S %s -atomic-expand -mtriple=i686-linux-gnu | FileCheck %s
+
+define i8 @test_initial_load(i8* %ptr, i8 %value) {
+ %res = atomicrmw nand i8* %ptr, i8 %value seq_cst
+ ret i8 %res
+}
+; CHECK-LABEL: @test_initial_load
+; CHECK-NEXT: %1 = load i8, i8* %ptr, align 1
Index: lib/CodeGen/AtomicExpandPass.cpp
===================================================================
--- lib/CodeGen/AtomicExpandPass.cpp
+++ lib/CodeGen/AtomicExpandPass.cpp
@@ -550,7 +550,7 @@
Builder.SetInsertPoint(BB);
LoadInst *InitLoaded = Builder.CreateLoad(Addr);
// Atomics require at least natural alignment.
- InitLoaded->setAlignment(AI->getType()->getPrimitiveSizeInBits());
+ InitLoaded->setAlignment(AI->getType()->getPrimitiveSizeInBits() / 8);
Builder.CreateBr(LoopBB);
// Start the main loop block now that we've taken care of the preliminaries.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D11783.31400.patch
Type: text/x-patch
Size: 1108 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150805/f22a5482/attachment.bin>
More information about the llvm-commits
mailing list