diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index d3cd9b1671e1b..52011e593f2e0 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -9252,7 +9252,7 @@ SDValue DAGCombiner::MatchLoadCombine(SDNode *N) { // Transfer chain users from old loads to the new load. for (LoadSDNode *L : Loads) - DAG.ReplaceAllUsesOfValueWith(SDValue(L, 1), SDValue(NewLoad.getNode(), 1)); + DAG.makeEquivalentMemoryOrdering(L, NewLoad); if (!NeedsBswap) return NewLoad; diff --git a/llvm/test/CodeGen/X86/load-combine.ll b/llvm/test/CodeGen/X86/load-combine.ll index 7e4e11fcc75c2..b5f3e78991881 100644 --- a/llvm/test/CodeGen/X86/load-combine.ll +++ b/llvm/test/CodeGen/X86/load-combine.ll @@ -1283,7 +1283,6 @@ define i32 @zext_load_i32_by_i8_bswap_shl_16(ptr %arg) { ret i32 %tmp8 } -; FIXME: This is a miscompile. define i32 @pr80911_vector_load_multiuse(ptr %ptr, ptr %clobber) nounwind { ; CHECK-LABEL: pr80911_vector_load_multiuse: ; CHECK: # %bb.0: @@ -1299,9 +1298,9 @@ define i32 @pr80911_vector_load_multiuse(ptr %ptr, ptr %clobber) nounwind { ; ; CHECK64-LABEL: pr80911_vector_load_multiuse: ; CHECK64: # %bb.0: +; CHECK64-NEXT: movl (%rdi), %ecx ; CHECK64-NEXT: movzwl (%rdi), %eax ; CHECK64-NEXT: movl $0, (%rsi) -; CHECK64-NEXT: movl (%rdi), %ecx ; CHECK64-NEXT: movl %ecx, (%rdi) ; CHECK64-NEXT: retq %load = load <4 x i8>, ptr %ptr, align 16