Skip to content

Commit 16a788f

Browse files
committed
[Misc] Remove deprecated ABI
1 parent b1ca5cf commit 16a788f

File tree

5 files changed

+111
-73
lines changed

5 files changed

+111
-73
lines changed

lib/CodeGen/ABICodec.cpp

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ llvm::Value *AbiEmitter::emitEncodeTuple(
4949
std::tie(Value, IsStateVariable) = Values[I];
5050
if (Value->getType()->isDynamic()) {
5151
DynamicPos.emplace_back(Int8Ptr, I);
52-
Int8Ptr = Builder.CreateInBoundsGEP(Int8Ptr, {Builder.getIntN(32, 32)});
52+
Int8Ptr = Builder.CreateInBoundsGEP(Builder.getInt8Ty(), Int8Ptr,
53+
{Builder.getIntN(32, 32)});
5354
} else {
5455
Int8Ptr = emitEncode(Int8Ptr, Value, IsStateVariable);
5556
}
@@ -96,7 +97,7 @@ AbiEmitter::getDecode(llvm::Value *Int8Ptr, const Type *Ty) {
9697
Builder.getIntN(32, 32)),
9798
Builder.getIntN(32, 32));
9899
llvm::Value *NextInt8Ptr =
99-
Builder.CreateInBoundsGEP(Int8Ptr, {EncodeLength});
100+
Builder.CreateInBoundsGEP(Builder.getInt8Ty(), Int8Ptr, {EncodeLength});
100101
return {ExprValue::getRValue(Ty, Val), NextInt8Ptr};
101102
}
102103
case Type::Category::Array: {
@@ -133,19 +134,20 @@ AbiEmitter::getDecode(llvm::Value *Int8Ptr, const Type *Ty) {
133134
case Type::Category::FixedBytes: {
134135
llvm::Value *ValPtr = Builder.CreatePointerCast(
135136
Int8Ptr, llvm::PointerType::getUnqual(ValueTy));
136-
llvm::Value *Val = Builder.CreateLoad(ValPtr, ValueTy);
137-
llvm::Value *NextInt8Ptr =
138-
Builder.CreateInBoundsGEP(Int8Ptr, {Builder.getInt32(32)});
137+
llvm::Value *Val = Builder.CreateLoad(ValueTy, ValPtr);
138+
llvm::Value *NextInt8Ptr = Builder.CreateInBoundsGEP(
139+
Builder.getInt8Ty(), Int8Ptr, {Builder.getInt32(32)});
139140
return {ExprValue::getRValue(Ty, Val), NextInt8Ptr};
140141
}
141142
default: {
142143
llvm::Value *ValPtr = Builder.CreatePointerCast(
143144
Int8Ptr, llvm::PointerType::getUnqual(CGM.Int256Ty));
144-
llvm::Value *Val = Builder.CreateLoad(ValPtr, CGM.Int256Ty);
145+
llvm::Value *Val = Builder.CreateLoad(CGM.Int256Ty, ValPtr);
145146
Val = CGM.getEndianlessValue(Val);
146147
Val = Builder.CreateZExtOrTrunc(Val, ValueTy);
147148
llvm::Value *NextInt8Ptr = Builder.CreateInBoundsGEP(
148-
Int8Ptr, {Builder.getInt32(ValueTy->getIntegerBitWidth() / 8)});
149+
Builder.getInt8Ty(), Int8Ptr,
150+
{Builder.getInt32(ValueTy->getIntegerBitWidth() / 8)});
149151
return {ExprValue::getRValue(Ty, Val), NextInt8Ptr};
150152
}
151153
}
@@ -162,7 +164,8 @@ AbiEmitter::getDecodeTuple(llvm::Value *Int8Ptr, const TupleType *Ty) {
162164
ExprValuePtr PosExprValue;
163165
std::tie(PosExprValue, NextInt8Ptr) = getDecode(NextInt8Ptr, &Int32Ty);
164166
llvm::Value *Pos = PosExprValue->load(Builder, CGM);
165-
DynamicPos.emplace_back(Builder.CreateInBoundsGEP(Int8Ptr, {Pos}), I);
167+
DynamicPos.emplace_back(
168+
Builder.CreateInBoundsGEP(Builder.getInt8Ty(), Int8Ptr, {Pos}), I);
166169
} else {
167170
ExprValuePtr ValExprValue;
168171
std::tie(ValExprValue, NextInt8Ptr) =
@@ -463,8 +466,9 @@ llvm::Value *AbiEmitter::emitEncodePacked(llvm::Value *Int8Ptr,
463466
const auto *FixedBytesTy = dynamic_cast<const FixedBytesType *>(Ty);
464467
unsigned PadRightLength = 32 - FixedBytesTy->getBitNum() / 8;
465468
if (PadRightLength % 32)
466-
Int8Ptr = Builder.CreateInBoundsGEP(
467-
Int8Ptr, {Builder.getIntN(32, PadRightLength)});
469+
Int8Ptr =
470+
Builder.CreateInBoundsGEP(Builder.getInt8Ty(), Int8Ptr,
471+
{Builder.getIntN(32, PadRightLength)});
468472
}
469473
return Int8Ptr;
470474
}
@@ -502,7 +506,8 @@ llvm::Value *AbiEmitter::emitEncode(llvm::Value *Int8Ptr,
502506
Int8Ptr = copyToInt8Ptr(
503507
Int8Ptr, Builder.CreateZExtOrTrunc(Length, CGF.Int256Ty), true);
504508
Int8Ptr = copyToInt8Ptr(Int8Ptr, Bytes, true);
505-
return Builder.CreateInBoundsGEP(Int8Ptr, {PadRightLength});
509+
return Builder.CreateInBoundsGEP(Builder.getInt8Ty(), Int8Ptr,
510+
{PadRightLength});
506511
}
507512
case Type::Category::Array: {
508513
llvm::Function *ThisFunc = Builder.GetInsertBlock()->getParent();
@@ -530,7 +535,8 @@ llvm::Value *AbiEmitter::emitEncode(llvm::Value *Int8Ptr,
530535
if (ArrTy->getElementType()->isDynamic()) {
531536
Head = Int8Ptr;
532537
Tail = Builder.CreateInBoundsGEP(
533-
Head, {Builder.CreateMul(ArrayLength, ABIStaticSizeValue)});
538+
Builder.getInt8Ty(), Head,
539+
{Builder.CreateMul(ArrayLength, ABIStaticSizeValue)});
534540
} else {
535541
Tail = Int8Ptr;
536542
}
@@ -606,7 +612,7 @@ llvm::Value *AbiEmitter::emitEncode(llvm::Value *Int8Ptr,
606612
unsigned PadRightLength = 32 - FixedBytesTy->getBitNum() / 8;
607613
if (PadRightLength % 32)
608614
Int8Ptr = Builder.CreateInBoundsGEP(
609-
Int8Ptr, {Builder.getIntN(32, PadRightLength)});
615+
Builder.getInt8Ty(), Int8Ptr, {Builder.getIntN(32, PadRightLength)});
610616
return Int8Ptr;
611617
}
612618
default: {
@@ -627,15 +633,16 @@ llvm::Value *AbiEmitter::copyToInt8Ptr(llvm::Value *Int8Ptr, llvm::Value *Value,
627633
Builder.CreateCall(Memcpy, {Builder.CreateBitCast(Int8Ptr, CGM.Int8PtrTy),
628634
SrcBytes, Length});
629635
if (IncreasePtr)
630-
return Builder.CreateInBoundsGEP(Int8Ptr, {Length});
636+
return Builder.CreateInBoundsGEP(Builder.getInt8Ty(), Int8Ptr, {Length});
631637
} else {
632638
Value = CGM.getEndianlessValue(Value);
633639
llvm::Value *CPtr =
634640
Builder.CreatePointerCast(Int8Ptr, llvm::PointerType::getUnqual(Ty));
635641
Builder.CreateStore(Value, CPtr);
636642
if (IncreasePtr)
637643
return Builder.CreateInBoundsGEP(
638-
Int8Ptr, {Builder.getInt32(Ty->getIntegerBitWidth() / 8)});
644+
Builder.getInt8Ty(), Int8Ptr,
645+
{Builder.getInt32(Ty->getIntegerBitWidth() / 8)});
639646
}
640647
return nullptr;
641648
}

lib/CodeGen/CGExpr.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <llvm/IR/Type.h>
1111
#include <llvm/IR/Value.h>
1212
#include <llvm/Support/raw_ostream.h>
13+
1314
namespace soll::CodeGen {
1415

1516
ExprValuePtr CodeGenFunction::emitExpr(const Expr *E) {
@@ -637,7 +638,8 @@ llvm::Value *CodeGenFunction::emitAsmCallMLoad(const CallExpr *CE) {
637638
llvm::Value *CPtr =
638639
Builder.CreateInBoundsGEP(CGM.getHeapBase(), {Pos}, "heap.cptr");
639640
llvm::Value *Ptr = Builder.CreateBitCast(CPtr, Int256PtrTy, "heap.ptr");
640-
llvm::Value *Value = CGM.getEndianlessValue(Builder.CreateLoad(Ptr));
641+
llvm::Value *Value =
642+
CGM.getEndianlessValue(Builder.CreateLoad(CGM.Int256Ty, Ptr));
641643
CGM.emitUpdateMemorySize(Pos, Builder.getIntN(256, 32));
642644
return Value;
643645
}
@@ -665,7 +667,7 @@ void CodeGenFunction::emitAsmCallMStore8(const CallExpr *CE) {
665667
}
666668

667669
llvm::Value *CodeGenFunction::emitAsmCallMSize(const CallExpr *CE) {
668-
return Builder.CreateLoad(CGM.getMemorySize());
670+
return Builder.CreateLoad(CGM.Int256Ty, CGM.getMemorySize());
669671
}
670672

671673
llvm::Value *CodeGenFunction::emitAsmCallSLoad(const CallExpr *CE) {
@@ -960,7 +962,7 @@ llvm::Value *CodeGenFunction::emitAsmCreate(const CallExpr *CE) {
960962
llvm::Value *AddressPtr = Builder.CreateAlloca(AddressTy);
961963

962964
CGM.emitCreate(ValuePtr, Ptr, Length, AddressPtr);
963-
return Builder.CreateLoad(AddressPtr, AddressTy);
965+
return Builder.CreateLoad(AddressTy, AddressPtr);
964966
}
965967

966968
llvm::Value *CodeGenFunction::emitAsmCreate2(const CallExpr *CE) {
@@ -977,7 +979,7 @@ llvm::Value *CodeGenFunction::emitAsmCreate2(const CallExpr *CE) {
977979
llvm::Value *AddressPtr = Builder.CreateAlloca(AddressTy);
978980

979981
CGM.emitCreate2(ValuePtr, Ptr, Length, Salt, AddressPtr);
980-
return Builder.CreateLoad(AddressPtr, AddressTy);
982+
return Builder.CreateLoad(AddressTy, AddressPtr);
981983
}
982984

983985
llvm::Value *CodeGenFunction::emitAsmByte(const CallExpr *CE) {
@@ -993,7 +995,7 @@ llvm::Value *CodeGenFunction::emitAsmByte(const CallExpr *CE) {
993995
llvm::Value *CodeGenFunction::emitAsmChainId(const CallExpr *CE) {
994996
llvm::Value *ValPtr = Builder.CreateAlloca(Int128Ty, nullptr);
995997
CGM.emitGetChainId(ValPtr);
996-
return Builder.CreateLoad(ValPtr, Int128Ty);
998+
return Builder.CreateLoad(Int128Ty, ValPtr);
997999
}
9981000

9991001
llvm::Value *CodeGenFunction::emitAsmLinkersymbol(const CallExpr *CE) {
@@ -1046,11 +1048,13 @@ llvm::Value *CodeGenFunction::emitAsmLoadImmutable(const CallExpr *CE) {
10461048
llvm::Value *ImmutableCPtr = Builder.CreateInBoundsGEP(
10471049
CGM.getImmutableBase(), {TableOffset}, "immutable.cptr");
10481050
llvm::Value *Offset = Builder.CreateLoad(
1051+
CGM.Int256Ty,
10491052
Builder.CreateBitCast(ImmutableCPtr, Int256PtrTy, "immutable.ptr"));
10501053

10511054
llvm::Value *HeapCPtr =
10521055
Builder.CreateInBoundsGEP(CGM.getHeapBase(), {Offset}, "heap.cptr");
10531056
return Builder.CreateLoad(
1057+
CGM.Int256Ty,
10541058
Builder.CreateBitCast(HeapCPtr, Int256PtrTy, "heap.ptr"));
10551059
}
10561060
}

lib/CodeGen/CGValue.h

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,10 @@ class ExprValue {
5050
case ValueKind::VK_RValue:
5151
return V;
5252
case ValueKind::VK_LValue:
53-
return Builder.CreateLoad(V, Name);
53+
return Builder.CreateLoad(V->getType()->getPointerElementType(), V, Name);
5454
case ValueKind::VK_SValue:
55-
llvm::Value *Address = CGM.getEndianlessValue(Builder.CreateLoad(V));
55+
llvm::Value *Address = CGM.getEndianlessValue(
56+
Builder.CreateLoad(V->getType()->getPointerElementType(), V));
5657
llvm::Value *Val = CGM.emitStorageLoad(Address);
5758
switch (Ty->getCategory()) {
5859
case Type::Category::Address:
@@ -153,8 +154,8 @@ class ExprValue {
153154
Builder.CreateStore(CGM.getEndianlessValue(PHIAddress), PHIAddressPtr);
154155
if (CGM.isEVM()) {
155156
llvm::Value *LoadV = Builder.CreateCall(
156-
StorageLoad,
157-
{CGM.getEndianlessValue(Builder.CreateLoad(PHIAddressPtr))});
157+
StorageLoad, {CGM.getEndianlessValue(Builder.CreateLoad(
158+
CGM.Int256Ty, PHIAddressPtr))});
158159
Builder.CreateStore(CGM.getEndianlessValue(LoadV),
159160
Builder.CreateBitCast(PHIPtr, CGM.Int256PtrTy));
160161
} else if (CGM.isEWASM()) {
@@ -167,7 +168,7 @@ class ExprValue {
167168
llvm::Value *NextAddress =
168169
Builder.CreateAdd(PHIAddress, Builder.getIntN(256, 1));
169170
llvm::Value *NextendPtr =
170-
Builder.CreateInBoundsGEP(PHIPtr, {Builder.getInt32(32)});
171+
Builder.CreateInBoundsGEP(CGM.Int8Ty, PHIPtr, {Builder.getInt32(32)});
171172
Condition = Builder.CreateICmpSGE(NextRemain, Builder.getIntN(256, 32));
172173
Builder.CreateCondBr(Condition, Loop, LoopEnd);
173174
PHIRemain->addIncoming(ExtendLength, ExtendSlot);
@@ -198,8 +199,8 @@ class ExprValue {
198199
ValPtr = Builder.CreateAlloca(CGM.Int256Ty);
199200
if (CGM.isEVM()) {
200201
llvm::Value *LoadV = Builder.CreateCall(
201-
StorageLoad,
202-
{CGM.getEndianlessValue(Builder.CreateLoad(AddressPtr))});
202+
StorageLoad, {CGM.getEndianlessValue(
203+
Builder.CreateLoad(CGM.Int256Ty, AddressPtr))});
203204
Builder.CreateStore(CGM.getEndianlessValue(LoadV), ValPtr);
204205
} else if (CGM.isEWASM()) {
205206
Builder.CreateCall(StorageLoad, {AddressPtr, ValPtr});
@@ -252,7 +253,8 @@ class ExprValue {
252253
Builder.CreateStore(Value, V);
253254
return;
254255
case ValueKind::VK_SValue:
255-
llvm::Value *Address = CGM.getEndianlessValue(Builder.CreateLoad(V));
256+
llvm::Value *Address = CGM.getEndianlessValue(
257+
Builder.CreateLoad(V->getType()->getPointerElementType(), V));
256258
switch (Ty->getCategory()) {
257259
case Type::Category::Address:
258260
case Type::Category::Bool:
@@ -318,11 +320,11 @@ class ExprValue {
318320
CGM.emitMemcpy(Builder.CreateBitCast(ValPtr, CGM.BytesElemPtrTy),
319321
Builder.CreateBitCast(Ptr, CGM.BytesElemPtrTy),
320322
Builder.CreateZExtOrTrunc(Length, CGM.Int32Ty));
321-
llvm::Value *Val = Builder.CreateLoad(ValPtr);
323+
llvm::Value *Val = Builder.CreateLoad(CGM.Int256Ty, ValPtr);
322324
Val = Builder.CreateOr(Val, CGM.getEndianlessValue(LengthEncode));
323325
Builder.CreateStore(Val, ValPtr);
324-
CGM.emitStorageStore(Builder.CreateLoad(AddressPtr),
325-
Builder.CreateLoad(ValPtr));
326+
CGM.emitStorageStore(Builder.CreateLoad(CGM.Int256Ty, AddressPtr),
327+
Builder.CreateLoad(CGM.Int256Ty, ValPtr));
326328
Builder.CreateBr(Done);
327329

328330
// ExtendSlot case
@@ -342,8 +344,8 @@ class ExprValue {
342344
LengthEncode = CGM.getEndianlessValue(
343345
Builder.CreateOr(LengthEncode, Builder.getIntN(256, 1)));
344346
Builder.CreateStore(LengthEncode, ValPtr);
345-
CGM.emitStorageStore(Builder.CreateLoad(AddressPtr),
346-
Builder.CreateLoad(ValPtr));
347+
CGM.emitStorageStore(Builder.CreateLoad(CGM.Int256Ty, AddressPtr),
348+
Builder.CreateLoad(CGM.Int256Ty, ValPtr));
347349
llvm::Value *Bytes = CGM.emitConcatBytes({Address});
348350
Address = CGM.emitKeccak256(Bytes);
349351
Condition = Builder.CreateICmpSGE(Length, Builder.getIntN(256, 32));
@@ -356,8 +358,9 @@ class ExprValue {
356358
llvm::PHINode *PHIAddressPtr = Builder.CreatePHI(CGM.Int256PtrTy, 2);
357359
Builder.CreateStore(CGM.getEndianlessValue(PHIAddress), PHIAddressPtr);
358360
CGM.emitStorageStore(
359-
Builder.CreateLoad(PHIAddressPtr),
360-
Builder.CreateLoad(Builder.CreateBitCast(PHIPtr, CGM.Int256PtrTy)));
361+
Builder.CreateLoad(CGM.Int256Ty, PHIAddressPtr),
362+
Builder.CreateLoad(CGM.Int256Ty,
363+
Builder.CreateBitCast(PHIPtr, CGM.Int256PtrTy)));
361364
llvm::Value *NextRemain =
362365
Builder.CreateSub(PHIRemain, Builder.getIntN(256, 32));
363366
llvm::Value *NextAddress =
@@ -396,8 +399,8 @@ class ExprValue {
396399
CGM.emitMemcpy(Builder.CreateBitCast(ValPtr, CGM.BytesElemPtrTy),
397400
Builder.CreateBitCast(PHIPtr, CGM.BytesElemPtrTy),
398401
Builder.CreateZExtOrTrunc(PHIRemain, CGM.Int32Ty));
399-
CGM.emitStorageStore(Builder.CreateLoad(AddressPtr),
400-
Builder.CreateLoad(ValPtr));
402+
CGM.emitStorageStore(Builder.CreateLoad(CGM.Int256Ty, AddressPtr),
403+
Builder.CreateLoad(CGM.Int256Ty, ValPtr));
401404
Builder.CreateBr(Done);
402405

403406
Builder.SetInsertPoint(Done);

0 commit comments

Comments
 (0)