Commit c47a943d authored by Tanya Lattner's avatar Tanya Lattner
Browse files

Merge 81810 from mainline.

When extending a memset range past the front, set the alignment of the
memset region to the alignment of the new start address.

llvm-svn: 81976
parent 318048b2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -271,6 +271,7 @@ void MemsetRanges::addStore(int64_t Start, StoreInst *SI) {
  if (Start < I->Start) {
    I->Start = Start;
    I->StartPtr = SI->getPointerOperand();
    I->Alignment = SI->getAlignment();
  }
    
  // Now we know that Start <= I->End and Start >= I->Start (so the startpoint
+18 −0
Original line number Diff line number Diff line
; RUN: opt < %s -S -memcpyopt | FileCheck %s

; The resulting memset is only 4-byte aligned, despite containing
; a 16-byte alignmed store in the middle.

; CHECK: call void @llvm.memset.i64(i8* %a01, i8 0, i64 16, i32 4)

define void @foo(i32* %p) {
  %a0 = getelementptr i32* %p, i64 0
  store i32 0, i32* %a0, align 4
  %a1 = getelementptr i32* %p, i64 1
  store i32 0, i32* %a1, align 16
  %a2 = getelementptr i32* %p, i64 2
  store i32 0, i32* %a2, align 4
  %a3 = getelementptr i32* %p, i64 3
  store i32 0, i32* %a3, align 4
  ret void
}