[PATCH] D108734: [InstCombine] Replace icmp invariant group operands with the invariant group's operands
Arthur Eubanks via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 25 15:40:33 PDT 2021
aeubanks updated this revision to Diff 368761.
aeubanks added a comment.
cleanup code
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D108734/new/
https://reviews.llvm.org/D108734
Files:
llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
llvm/test/Transforms/InstCombine/invariant.group.ll
Index: llvm/test/Transforms/InstCombine/invariant.group.ll
===================================================================
--- llvm/test/Transforms/InstCombine/invariant.group.ll
+++ llvm/test/Transforms/InstCombine/invariant.group.ll
@@ -107,7 +107,6 @@
define i1 @simplifyForCompare(i8* %a) {
; CHECK-LABEL: @simplifyForCompare(
-; CHECK-NEXT: [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A:%.*]])
; CHECK-NEXT: ret i1 true
;
%a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
@@ -161,10 +160,7 @@
define i1 @icmp1(i8* %a) {
; CHECK-LABEL: @icmp1(
-; CHECK-NEXT: [[A2:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* [[A:%.*]])
-; CHECK-NEXT: [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A]])
-; CHECK-NEXT: [[R:%.*]] = icmp eq i8* [[A2]], [[TMP1]]
-; CHECK-NEXT: ret i1 [[R]]
+; CHECK-NEXT: ret i1 true
;
%a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
%a3 = call i8* @llvm.strip.invariant.group.p0i8(i8* %a2)
@@ -174,9 +170,7 @@
define i1 @icmp2(i8* %a, i8* %b) {
; CHECK-LABEL: @icmp2(
-; CHECK-NEXT: [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A:%.*]])
-; CHECK-NEXT: [[TMP2:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* [[B:%.*]])
-; CHECK-NEXT: [[R:%.*]] = icmp eq i8* [[TMP1]], [[TMP2]]
+; CHECK-NEXT: [[R:%.*]] = icmp eq i8* [[A:%.*]], [[B:%.*]]
; CHECK-NEXT: ret i1 [[R]]
;
%a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
Index: llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
===================================================================
--- llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
+++ llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
@@ -5702,6 +5702,21 @@
return ExtractValueInst::Create(UAddOv, 1);
}
+static Instruction *foldICmpInvariantGroup(ICmpInst &I) {
+ std::array<Value *, 2> Ops = {I.getOperand(0), I.getOperand(1)};
+ bool Changed = false;
+ for (Value *&Op : Ops) {
+ auto *I = dyn_cast<Instruction>(Op);
+ if (!I || !I->isLaunderOrStripInvariantGroup())
+ continue;
+ Op = I->getOperand(0);
+ Changed = true;
+ }
+ if (!Changed)
+ return nullptr;
+ return ICmpInst::Create(Instruction::ICmp, I.getPredicate(), Ops[0], Ops[1]);
+}
+
Instruction *InstCombinerImpl::visitICmpInst(ICmpInst &I) {
bool Changed = false;
const SimplifyQuery Q = SQ.getWithInstruction(&I);
@@ -5942,6 +5957,9 @@
if (Instruction *Res = foldVectorCmp(I, Builder))
return Res;
+ if (Instruction *Res = foldICmpInvariantGroup(I))
+ return Res;
+
return Changed ? &I : nullptr;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D108734.368761.patch
Type: text/x-patch
Size: 2646 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210825/94d5c2f8/attachment.bin>
More information about the llvm-commits
mailing list