[PATCH] D107798: [Attributor][FIX] Only avoid visiting PHI uses multiple times (PR51249)
Johannes Doerfert via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 9 20:35:15 PDT 2021
jdoerfert created this revision.
jdoerfert added reviewers: jhuber6, lebedev.ri, ye-luo.
Herald added subscribers: ormris, okura, kuter, uenoku, bollu, hiraditya.
Herald added a reviewer: uenoku.
Herald added a reviewer: homerdin.
jdoerfert requested review of this revision.
Herald added a reviewer: sstefan1.
Herald added a reviewer: baziotis.
Herald added a project: LLVM.
AAPointerInfoFloating needs to visit all uses and some multiple times if
we go through PHI nodes. Attributor::checkForAllUses keeps a visited set
so we don't recurs endlessly. We now allow recursion for non-phi uses so
we track all pointer offsets via PHI nodes properly without endless
recursion.
This replaces the first attempt D107579 <https://reviews.llvm.org/D107579>.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D107798
Files:
llvm/lib/Transforms/IPO/Attributor.cpp
llvm/test/Transforms/Attributor/value-simplify-pointer-info.ll
Index: llvm/test/Transforms/Attributor/value-simplify-pointer-info.ll
===================================================================
--- llvm/test/Transforms/Attributor/value-simplify-pointer-info.ll
+++ llvm/test/Transforms/Attributor/value-simplify-pointer-info.ll
@@ -2859,7 +2859,7 @@
; IS__TUNIT_OPM-NEXT: [[C:%.*]] = icmp eq i8 [[O]], 2
; IS__TUNIT_OPM-NEXT: br i1 [[C]], label [[END:%.*]], label [[LOOP]]
; IS__TUNIT_OPM: end:
-; IS__TUNIT_OPM-NEXT: ret i8 undef
+; IS__TUNIT_OPM-NEXT: ret i8 1
;
; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind readnone willreturn
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@phi_store
@@ -2876,7 +2876,7 @@
; IS__TUNIT_NPM-NEXT: [[C:%.*]] = icmp eq i8 [[O]], 2
; IS__TUNIT_NPM-NEXT: br i1 [[C]], label [[END:%.*]], label [[LOOP]]
; IS__TUNIT_NPM: end:
-; IS__TUNIT_NPM-NEXT: ret i8 undef
+; IS__TUNIT_NPM-NEXT: ret i8 1
;
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@phi_store
@@ -2893,7 +2893,7 @@
; IS__CGSCC_OPM-NEXT: [[C:%.*]] = icmp eq i8 [[O]], 2
; IS__CGSCC_OPM-NEXT: br i1 [[C]], label [[END:%.*]], label [[LOOP]]
; IS__CGSCC_OPM: end:
-; IS__CGSCC_OPM-NEXT: ret i8 undef
+; IS__CGSCC_OPM-NEXT: ret i8 1
;
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@phi_store
@@ -2910,7 +2910,7 @@
; IS__CGSCC_NPM-NEXT: [[C:%.*]] = icmp eq i8 [[O]], 2
; IS__CGSCC_NPM-NEXT: br i1 [[C]], label [[END:%.*]], label [[LOOP]]
; IS__CGSCC_NPM: end:
-; IS__CGSCC_NPM-NEXT: ret i8 undef
+; IS__CGSCC_NPM-NEXT: ret i8 1
;
entry:
%a = alloca i16
Index: llvm/lib/Transforms/IPO/Attributor.cpp
===================================================================
--- llvm/lib/Transforms/IPO/Attributor.cpp
+++ llvm/lib/Transforms/IPO/Attributor.cpp
@@ -32,6 +32,7 @@
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instruction.h"
+#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/NoFolder.h"
#include "llvm/IR/ValueHandle.h"
@@ -1023,7 +1024,7 @@
while (!Worklist.empty()) {
const Use *U = Worklist.pop_back_val();
- if (!Visited.insert(U).second)
+ if (isa<PHINode>(U->getUser()) && !Visited.insert(U).second)
continue;
LLVM_DEBUG(dbgs() << "[Attributor] Check use: " << **U << " in "
<< *U->getUser() << "\n");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107798.365340.patch
Type: text/x-patch
Size: 2524 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210810/999f605c/attachment.bin>
More information about the llvm-commits
mailing list