1
0
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:
Jean-Michel Gorius 2020-05-18 21:30:43 +02:00
parent 38c9856b3c
commit 63eeb3f8ce
2 changed files with 16 additions and 0 deletions

View File

@ -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;

View 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 {{%.*}})
}