mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[x86] Propagate memory operands during ISel DAG postprocessing
Summary: Propagate memory operands when folding test instructions. This was split from D80062. Reviewers: craig.topper, rnk, lebedev.ri Reviewed By: craig.topper Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D80140
This commit is contained in:
parent
38c9856b3c
commit
63eeb3f8ce
@ -1388,6 +1388,8 @@ void X86DAGToDAGISel::PostprocessISelDAG() {
|
||||
And.getOperand(6) /* Chain */ };
|
||||
MachineSDNode *Test = CurDAG->getMachineNode(NewOpc, SDLoc(N),
|
||||
MVT::i32, MVT::Other, Ops);
|
||||
CurDAG->setNodeMemRefs(
|
||||
Test, cast<MachineSDNode>(And.getNode())->memoperands());
|
||||
ReplaceUses(N, Test);
|
||||
MadeChange = true;
|
||||
continue;
|
||||
|
14
test/CodeGen/X86/isel-postprocessing-test-fold-memop.ll
Normal file
14
test/CodeGen/X86/isel-postprocessing-test-fold-memop.ll
Normal file
@ -0,0 +1,14 @@
|
||||
; RUN: llc -O2 -mtriple=x86_64-- -stop-after=finalize-isel < %s | FileCheck %s
|
||||
|
||||
define i1 @fold_test(i64* %x, i64 %l) {
|
||||
entry:
|
||||
%0 = load i64, i64* %x, align 8
|
||||
%and = and i64 %0, %l
|
||||
%tobool = icmp ne i64 %and, 0
|
||||
ret i1 %tobool
|
||||
|
||||
; Folding the load+and+icmp instructions into a TEST64mr instruction
|
||||
; should preserve memory operands.
|
||||
; CHECK: TEST64mr {{.*}} :: (load 8 from {{%.*}})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user