Add an optimization (e.g. maybe EVMTTIImpl::instCombineIntrinsic or in EVMCodegenPrepare) to fold balance of the current contract address into selfbalance.
declare i256 @llvm.evm.address()
declare i256 @llvm.evm.balance(i256)
define i256 @test() {
entry:
%address = tail call i256 @llvm.evm.address()
%and = and i256 %address, 1461501637330902918203684832716283019655932542975
%balance = tail call i256 @llvm.evm.balance(i256 %and)
ret i256 %balance
}