[PATCH] D35030: [DAG] Handle missing transform in fold of value extension case.
Nirav Dave via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 5 13:39:19 PDT 2017
niravd created this revision.
When pushing an extension of a constant bitwise operator on a load
into the load, change other uses of the load value if they exist to
prevent the old load from persisting.
https://reviews.llvm.org/D35030
Files:
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
test/CodeGen/X86/avx512-mask-op.ll
Index: test/CodeGen/X86/avx512-mask-op.ll
===================================================================
--- test/CodeGen/X86/avx512-mask-op.ll
+++ test/CodeGen/X86/avx512-mask-op.ll
@@ -1630,10 +1630,8 @@
; CHECK-LABEL: f1:
; CHECK: ## BB#0: ## %entry
; CHECK-NEXT: movzbl {{.*}}(%rip), %edi
-; CHECK-NEXT: movl %edi, %eax
-; CHECK-NEXT: xorb $1, %al
-; CHECK-NEXT: movb %al, {{.*}}(%rip)
; CHECK-NEXT: xorl $1, %edi
+; CHECK-NEXT: movb %dil, {{.*}}(%rip)
; CHECK-NEXT: jmp _f2 ## TAILCALL
entry:
%.b1 = load i1, i1* @f1.v, align 4
Index: lib/CodeGen/SelectionDAG/DAGCombiner.cpp
===================================================================
--- lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -7193,6 +7193,12 @@
N0.getOperand(0).getValueType(), ExtLoad);
ExtendSetCCUses(SetCCs, Trunc, ExtLoad, DL, ISD::SIGN_EXTEND);
CombineTo(N0.getOperand(0).getNode(), Trunc, ExtLoad.getValue(1));
+ // If N0 has multiple uses, change other uses as well.
+ if (!N0.hasOneUse()) {
+ SDValue TruncAnd =
+ DAG.getNode(ISD::TRUNCATE, DL, N0.getValueType(), And);
+ CombineTo(N0.getNode(), TruncAnd);
+ }
return CombineTo(N, And); // Return N so it doesn't get rechecked!
}
}
@@ -7486,6 +7492,12 @@
N0.getOperand(0).getValueType(), ExtLoad);
ExtendSetCCUses(SetCCs, Trunc, ExtLoad, DL, ISD::ZERO_EXTEND);
CombineTo(N0.getOperand(0).getNode(), Trunc, ExtLoad.getValue(1));
+ // If N0 has multiple uses, change other uses as well.
+ if (!N0.hasOneUse()) {
+ SDValue TruncAnd =
+ DAG.getNode(ISD::TRUNCATE, DL, N0.getValueType(), And);
+ CombineTo(N0.getNode(), TruncAnd);
+ }
return CombineTo(N, And); // Return N so it doesn't get rechecked!
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D35030.105330.patch
Type: text/x-patch
Size: 1974 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170705/c62855e5/attachment.bin>
More information about the llvm-commits
mailing list