[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