Skip to content

Commit 4f9cb5a

Browse files
committed
[EVM] Add some opt passes before ISel
1 parent 19eef91 commit 4f9cb5a

File tree

4 files changed

+34
-1
lines changed

4 files changed

+34
-1
lines changed

llvm/lib/Analysis/MemoryLocation.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,10 @@ MemoryLocation MemoryLocation::getForArgument(const CallBase *Call,
190190
case Intrinsic::memcpy_inline:
191191
case Intrinsic::memmove:
192192
case Intrinsic::memset:
193+
case Intrinsic::evm_memmoveas1as1:
194+
case Intrinsic::evm_memcpyas1as2:
195+
case Intrinsic::evm_memcpyas1as3:
196+
case Intrinsic::evm_memcpyas1as4:
193197
if (ConstantInt *LenCI = dyn_cast<ConstantInt>(II->getArgOperand(2)))
194198
if (LenCI->getValue().getActiveBits() > 64)
195199
return MemoryLocation::getAfter(Arg, AATags);

llvm/lib/Analysis/VMAliasAnalysis.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ static std::optional<APInt> getConstStartLoc(const MemoryLocation &Loc,
9595
AliasResult VMAAResult::alias(const MemoryLocation &LocA,
9696
const MemoryLocation &LocB, AAQueryInfo &AAQI,
9797
const Instruction *I) {
98+
if (!isa<PointerType>(LocA.Ptr->getType()) ||
99+
!isa<PointerType>(LocB.Ptr->getType()))
100+
return AAResultBase::alias(LocA, LocB, AAQI, I);
101+
98102
const unsigned ASA = LocA.Ptr->getType()->getPointerAddressSpace();
99103
const unsigned ASB = LocB.Ptr->getType()->getPointerAddressSpace();
100104

llvm/lib/Target/EVM/EVMTargetMachine.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,16 @@
2525
#include "llvm/InitializePasses.h"
2626
#include "llvm/MC/TargetRegistry.h"
2727
#include "llvm/Passes/PassBuilder.h"
28+
#include "llvm/Transforms/IPO.h"
2829
#include "llvm/Transforms/IPO/GlobalDCE.h"
30+
#include "llvm/Transforms/InstCombine/InstCombine.h"
31+
#include "llvm/Transforms/Scalar.h"
32+
#include "llvm/Transforms/Scalar/DeadStoreElimination.h"
33+
#include "llvm/Transforms/Scalar/EarlyCSE.h"
34+
#include "llvm/Transforms/Scalar/GVN.h"
2935
#include "llvm/Transforms/Scalar/MergeIdenticalBB.h"
36+
#include "llvm/Transforms/Scalar/NewGVN.h"
37+
#include "llvm/Transforms/Scalar/SimplifyCFG.h"
3038
#include "llvm/Transforms/Utils.h"
3139

3240
using namespace llvm;
@@ -147,6 +155,24 @@ void EVMTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
147155
FAM.registerPass([] { return EVMAA(); });
148156
});
149157

158+
PB.registerOptimizerLastEPCallback(
159+
[](ModulePassManager &PM, OptimizationLevel Level) {
160+
if (Level != OptimizationLevel::O0) {
161+
PM.addPass(GlobalDCEPass());
162+
FunctionPassManager FPM;
163+
FPM.addPass(EarlyCSEPass(true /* Enable mem-ssa. */));
164+
FPM.addPass(NewGVNPass());
165+
FPM.addPass(DSEPass());
166+
FPM.addPass(MergeIdenticalBBPass());
167+
FPM.addPass(SimplifyCFGPass(SimplifyCFGOptions()
168+
.convertSwitchRangeToICmp(true)
169+
.hoistCommonInsts(true)
170+
.sinkCommonInsts(true)));
171+
FPM.addPass(InstCombinePass());
172+
PM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM), true));
173+
}
174+
});
175+
150176
PB.registerPipelineParsingCallback(
151177
[](StringRef PassName, ModulePassManager &PM,
152178
ArrayRef<PassBuilder::PipelineElement>) {

llvm/test/CodeGen/EVM/sha3-constant-folding.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,6 @@ define i256 @sha3_test_9(ptr addrspace(1) %addr) nounwind {
193193
; CHECK-LABEL: define noundef i256 @sha3_test_9
194194
; CHECK-SAME: (ptr addrspace(1) nocapture writeonly [[ADDR:%.*]]) local_unnamed_addr #[[ATTR2]] {
195195
; CHECK-NEXT: entry:
196-
; CHECK-NEXT: store i256 304594385234, ptr addrspace(1) [[ADDR]], align 1
197196
; CHECK-NEXT: [[NEXT_ADDR:%.*]] = getelementptr i8, ptr addrspace(1) [[ADDR]], i256 32
198197
; CHECK-NEXT: store i256 -53675409633959416604748946233496653964072736789863655143901645101595015023076, ptr addrspace(1) [[NEXT_ADDR]], align 1
199198
; CHECK-NEXT: store i256 111111111111, ptr addrspace(1) [[ADDR]], align 1

0 commit comments

Comments
 (0)