65
65
#if LLVM_VERSION_MAJOR >= 13
66
66
#include " llvm/Transforms/IPO/Attributor.h"
67
67
#include " llvm/Transforms/IPO/OpenMPOpt.h"
68
+ #include " llvm/Transforms/Utils/Mem2Reg.h"
68
69
#endif
69
70
70
71
#include " CApi.h"
@@ -82,7 +83,7 @@ llvm::cl::opt<bool> EnzymeAttributor("enzyme-attributor", cl::init(false),
82
83
cl::Hidden,
83
84
cl::desc(" Run attributor post Enzyme" ));
84
85
85
- llvm::cl::opt<bool > EnzymeOMPOpt (" enzyme-omp-opt" , cl::init(true ), cl::Hidden,
86
+ llvm::cl::opt<bool > EnzymeOMPOpt (" enzyme-omp-opt" , cl::init(false ), cl::Hidden,
86
87
cl::desc(" Whether to enable openmp opt" ));
87
88
88
89
#if LLVM_VERSION_MAJOR >= 14
@@ -1751,6 +1752,11 @@ class Enzyme : public ModulePass {
1751
1752
#if LLVM_VERSION_MAJOR >= 13
1752
1753
if (Logic.PostOpt && EnzymeOMPOpt) {
1753
1754
OpenMPOptPass ().run (M, Logic.PPC .MAM );
1755
+ // / Attributor is run second time for promoted args to get attributes.
1756
+ AttributorPass ().run (M, Logic.PPC .MAM );
1757
+ for (auto &F : M)
1758
+ if (!F.empty ())
1759
+ PromotePass ().run (F, Logic.PPC .FAM );
1754
1760
changed = true ;
1755
1761
}
1756
1762
#endif
@@ -1814,9 +1820,18 @@ class Enzyme : public ModulePass {
1814
1820
}
1815
1821
1816
1822
#if LLVM_VERSION_MAJOR >= 13
1817
- if (Logic.PostOpt && EnzymeOMPOpt) {
1818
- OpenMPOptPass ().run (M, Logic.PPC .MAM );
1819
- changed = true ;
1823
+ if (Logic.PostOpt ) {
1824
+ if (EnzymeOMPOpt) {
1825
+ auto &MAM = Logic.PPC .MAM ;
1826
+ auto &FAM = Logic.PPC .FAM ;
1827
+ OpenMPOptPass ().run (M, MAM);
1828
+ // / Attributor is run second time for promoted args to get attributes.
1829
+ AttributorPass ().run (M, MAM);
1830
+ for (auto &F : M)
1831
+ if (!F.empty ())
1832
+ PromotePass ().run (F, FAM);
1833
+ changed = true ;
1834
+ }
1820
1835
}
1821
1836
#endif
1822
1837
0 commit comments