Commit fece094b authored by Hans Wennborg's avatar Hans Wennborg
Browse files

Merging r228760 and r228761:

------------------------------------------------------------------------
r228760 | majnemer | 2015-02-10 15:09:43 -0800 (Tue, 10 Feb 2015) | 3 lines

EarlyCSE: It isn't safe to CSE across synchronization boundaries

This fixes PR22514.
------------------------------------------------------------------------

------------------------------------------------------------------------
r228761 | majnemer | 2015-02-10 15:11:02 -0800 (Tue, 10 Feb 2015) | 1 line

EarlyCSE: Add check lines for test added in r228760
------------------------------------------------------------------------

llvm-svn: 228790
parent a0b6a3d5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -480,6 +480,9 @@ bool EarlyCSE::processNode(DomTreeNode *Node) {
      // Ignore volatile loads.
      if (!LI->isSimple()) {
        LastStore = nullptr;
        // Don't CSE across synchronization boundaries.
        if (Inst->mayWriteToMemory())
          ++CurrentGeneration;
        continue;
      }

+10 −1
Original line number Diff line number Diff line
@@ -192,4 +192,13 @@ define void @test11(i32 *%P) {
  ; CHECK-NEXT: ret void
}

; CHECK-LABEL: @test12(
define i32 @test12(i1 %B, i32* %P1, i32* %P2) {
  %load0 = load i32* %P1
  %1 = load atomic i32* %P2 seq_cst, align 4
  %load1 = load i32* %P1
  %sel = select i1 %B, i32 %load0, i32 %load1
  ret i32 %sel
  ; CHECK: load i32* %P1
  ; CHECK: load i32* %P1
}