1010#include < llvm/IR/Type.h>
1111#include < llvm/IR/Value.h>
1212#include < llvm/Support/raw_ostream.h>
13+
1314namespace soll ::CodeGen {
1415
1516ExprValuePtr CodeGenFunction::emitExpr (const Expr *E) {
@@ -381,7 +382,7 @@ ExprValuePtr CodeGenFunction::emitAbiDecode(const CallExpr *CE) {
381382
382383ExprValuePtr CodeGenFunction::emitAbiDecode (llvm::Value *Bytes,
383384 const Type *TupleTy) {
384- llvm::Value *Length = Builder.CreateZExtOrTrunc (
385+ [[maybe_unused]] llvm::Value *Length = Builder.CreateZExtOrTrunc (
385386 Builder.CreateExtractValue (Bytes, {0 }), CGM.Int32Ty );
386387 llvm::Value *SrcBytes = Builder.CreateExtractValue (Bytes, {1 });
387388
@@ -634,19 +635,22 @@ llvm::Value *CodeGenFunction::emitAsmGetBalance(const CallExpr *CE,
634635llvm::Value *CodeGenFunction::emitAsmCallMLoad (const CallExpr *CE) {
635636 auto Arguments = CE->getArguments ();
636637 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
637- llvm::Value *CPtr =
638- Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Pos}, " heap.cptr" );
638+ llvm::Value *CPtr = Builder.CreateInBoundsGEP (
639+ CGM.getHeapBase ()->getType ()->getPointerElementType (), CGM.getHeapBase (),
640+ {Pos}, " heap.cptr" );
639641 llvm::Value *Ptr = Builder.CreateBitCast (CPtr, Int256PtrTy, " heap.ptr" );
640- llvm::Value *Value = CGM.getEndianlessValue (Builder.CreateLoad (Ptr));
642+ llvm::Value *Value =
643+ CGM.getEndianlessValue (Builder.CreateLoad (CGM.Int256Ty , Ptr));
641644 CGM.emitUpdateMemorySize (Pos, Builder.getIntN (256 , 32 ));
642645 return Value;
643646}
644647
645648void CodeGenFunction::emitAsmCallMStore (const CallExpr *CE) {
646649 auto Arguments = CE->getArguments ();
647650 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
648- llvm::Value *CPtr =
649- Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Pos}, " heap.cptr" );
651+ llvm::Value *CPtr = Builder.CreateInBoundsGEP (
652+ CGM.getHeapBase ()->getType ()->getPointerElementType (), CGM.getHeapBase (),
653+ {Pos}, " heap.cptr" );
650654 llvm::Value *Ptr = Builder.CreateBitCast (CPtr, Int256PtrTy, " heap.ptr" );
651655 Builder.CreateStore (
652656 CGM.getEndianlessValue (emitExpr (Arguments[1 ])->load (Builder, CGM)), Ptr);
@@ -656,16 +660,17 @@ void CodeGenFunction::emitAsmCallMStore(const CallExpr *CE) {
656660void CodeGenFunction::emitAsmCallMStore8 (const CallExpr *CE) {
657661 auto Arguments = CE->getArguments ();
658662 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
659- llvm::Value *Ptr =
660- Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Pos}, " heap.ptr" );
663+ llvm::Value *Ptr = Builder.CreateInBoundsGEP (
664+ CGM.getHeapBase ()->getType ()->getPointerElementType (), CGM.getHeapBase (),
665+ {Pos}, " heap.ptr" );
661666 llvm::Value *Value = Builder.CreateZExtOrTrunc (
662667 emitExpr (Arguments[1 ])->load (Builder, CGM), CGM.Int8Ty );
663668 Builder.CreateStore (Value, Ptr);
664669 CGM.emitUpdateMemorySize (Pos, Builder.getIntN (256 , 1 ));
665670}
666671
667672llvm::Value *CodeGenFunction::emitAsmCallMSize (const CallExpr *CE) {
668- return Builder.CreateLoad (CGM.getMemorySize ());
673+ return Builder.CreateLoad (CGM.Int256Ty , CGM. getMemorySize ());
669674}
670675
671676llvm::Value *CodeGenFunction::emitAsmCallSLoad (const CallExpr *CE) {
@@ -688,8 +693,9 @@ void CodeGenFunction::emitAsmCallSStore(const CallExpr *CE) {
688693void CodeGenFunction::emitAsmCallReturn (const CallExpr *CE) {
689694 auto Arguments = CE->getArguments ();
690695 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
691- llvm::Value *Ptr =
692- Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Pos}, " heap.cptr" );
696+ llvm::Value *Ptr = Builder.CreateInBoundsGEP (
697+ CGM.getHeapBase ()->getType ()->getPointerElementType (), CGM.getHeapBase (),
698+ {Pos}, " heap.cptr" );
693699 llvm::Value *Length = emitExpr (Arguments[1 ])->load (Builder, CGM);
694700 CGM.emitUpdateMemorySize (Pos, Length);
695701 CGM.emitFinish (Ptr, Builder.CreateZExtOrTrunc (Length, CGM.Int32Ty ));
@@ -698,8 +704,9 @@ void CodeGenFunction::emitAsmCallReturn(const CallExpr *CE) {
698704void CodeGenFunction::emitAsmCallRevert (const CallExpr *CE) {
699705 auto Arguments = CE->getArguments ();
700706 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
701- llvm::Value *Ptr =
702- Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Pos}, " heap.cptr" );
707+ llvm::Value *Ptr = Builder.CreateInBoundsGEP (
708+ CGM.getHeapBase ()->getType ()->getPointerElementType (), CGM.getHeapBase (),
709+ {Pos}, " heap.cptr" );
703710 llvm::Value *Length = emitExpr (Arguments[1 ])->load (Builder, CGM);
704711 CGM.emitUpdateMemorySize (Pos, Length);
705712 CGM.emitRevert (Ptr, Builder.CreateZExtOrTrunc (Length, CGM.Int32Ty ));
@@ -714,8 +721,9 @@ void CodeGenFunction::emitAsmSelfDestruct(const CallExpr *CE) {
714721void CodeGenFunction::emitAsmCallLog (const CallExpr *CE) {
715722 auto Arguments = CE->getArguments ();
716723 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
717- llvm::Value *Data =
718- Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Pos}, " heap.cptr" );
724+ llvm::Value *Data = Builder.CreateInBoundsGEP (
725+ CGM.getHeapBase ()->getType ()->getPointerElementType (), CGM.getHeapBase (),
726+ {Pos}, " heap.cptr" );
719727 llvm::Value *DataLength = emitExpr (Arguments[1 ])->load (Builder, CGM);
720728 std::vector<llvm::Value *> Topics;
721729 for (size_t I = 2 ; I < Arguments.size (); I++) {
@@ -739,8 +747,9 @@ llvm::Value *CodeGenFunction::emitAsmCallCallDataLoad(const CallExpr *CE) {
739747void CodeGenFunction::emitAsmCallCodeCopy (const CallExpr *CE) {
740748 auto Arguments = CE->getArguments ();
741749 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
742- llvm::Value *Ptr =
743- Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Pos}, " heap.ptr" );
750+ llvm::Value *Ptr = Builder.CreateInBoundsGEP (
751+ CGM.getHeapBase ()->getType ()->getPointerElementType (), CGM.getHeapBase (),
752+ {Pos}, " heap.ptr" );
744753 llvm::Value *Code = Builder.CreateIntToPtr (
745754 emitExpr (Arguments[1 ])->load (Builder, CGM), Int8PtrTy);
746755 llvm::Value *Length = emitExpr (Arguments[2 ])->load (Builder, CGM);
@@ -802,8 +811,9 @@ llvm::Value *CodeGenFunction::emitAsmCallkeccak256(const CallExpr *CE) {
802811 // keccak256 function
803812 auto Arguments = CE->getArguments ();
804813 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
805- llvm::Value *Ptr =
806- Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Pos}, " heap.cptr" );
814+ llvm::Value *Ptr = Builder.CreateInBoundsGEP (
815+ CGM.getHeapBase ()->getType ()->getPointerElementType (), CGM.getHeapBase (),
816+ {Pos}, " heap.cptr" );
807817 llvm::Value *Length = emitExpr (Arguments[1 ])->load (Builder, CGM);
808818 CGM.emitUpdateMemorySize (Pos, Length);
809819 return CGM.emitKeccak256 (Ptr, Length);
@@ -960,7 +970,7 @@ llvm::Value *CodeGenFunction::emitAsmCreate(const CallExpr *CE) {
960970 llvm::Value *AddressPtr = Builder.CreateAlloca (AddressTy);
961971
962972 CGM.emitCreate (ValuePtr, Ptr, Length, AddressPtr);
963- return Builder.CreateLoad (AddressPtr, AddressTy );
973+ return Builder.CreateLoad (AddressTy, AddressPtr );
964974}
965975
966976llvm::Value *CodeGenFunction::emitAsmCreate2 (const CallExpr *CE) {
@@ -977,7 +987,7 @@ llvm::Value *CodeGenFunction::emitAsmCreate2(const CallExpr *CE) {
977987 llvm::Value *AddressPtr = Builder.CreateAlloca (AddressTy);
978988
979989 CGM.emitCreate2 (ValuePtr, Ptr, Length, Salt, AddressPtr);
980- return Builder.CreateLoad (AddressPtr, AddressTy );
990+ return Builder.CreateLoad (AddressTy, AddressPtr );
981991}
982992
983993llvm::Value *CodeGenFunction::emitAsmByte (const CallExpr *CE) {
@@ -993,7 +1003,7 @@ llvm::Value *CodeGenFunction::emitAsmByte(const CallExpr *CE) {
9931003llvm::Value *CodeGenFunction::emitAsmChainId (const CallExpr *CE) {
9941004 llvm::Value *ValPtr = Builder.CreateAlloca (Int128Ty, nullptr );
9951005 CGM.emitGetChainId (ValPtr);
996- return Builder.CreateLoad (ValPtr, Int128Ty );
1006+ return Builder.CreateLoad (Int128Ty, ValPtr );
9971007}
9981008
9991009llvm::Value *CodeGenFunction::emitAsmLinkersymbol (const CallExpr *CE) {
@@ -1015,13 +1025,15 @@ void CodeGenFunction::emitAsmSetImmutable(const CallExpr *CE) {
10151025 llvm::Value *Offset = emitExpr (Arguments[0 ])->load (Builder, CGM);
10161026 llvm::Value *TableOffset = Builder.getInt (Map.lookup (StringRefName));
10171027 llvm::Value *ImmutableCPtr = Builder.CreateInBoundsGEP (
1028+ CGM.getImmutableBase ()->getType ()->getPointerElementType (),
10181029 CGM.getImmutableBase (), {TableOffset}, " immutable.cptr" );
10191030 Builder.CreateStore (
10201031 Offset,
10211032 Builder.CreateBitCast (ImmutableCPtr, Int256PtrTy, " immutable.ptr" ));
10221033
1023- llvm::Value *HeapCPtr =
1024- Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Offset}, " heap.cptr" );
1034+ llvm::Value *HeapCPtr = Builder.CreateInBoundsGEP (
1035+ CGM.getHeapBase ()->getType ()->getPointerElementType (),
1036+ CGM.getHeapBase (), {Offset}, " heap.cptr" );
10251037 Builder.CreateStore (
10261038 Value, Builder.CreateBitCast (HeapCPtr, Int256PtrTy, " heap.ptr" ));
10271039 CGM.emitUpdateMemorySize (Offset, Builder.getIntN (256 , 0x20 ));
@@ -1044,13 +1056,17 @@ llvm::Value *CodeGenFunction::emitAsmLoadImmutable(const CallExpr *CE) {
10441056 if (Map.find (StringRefName) != Map.end ()) {
10451057 llvm::Value *TableOffset = Builder.getInt (Map.lookup (StringRefName));
10461058 llvm::Value *ImmutableCPtr = Builder.CreateInBoundsGEP (
1059+ CGM.getImmutableBase ()->getType ()->getPointerElementType (),
10471060 CGM.getImmutableBase (), {TableOffset}, " immutable.cptr" );
10481061 llvm::Value *Offset = Builder.CreateLoad (
1062+ CGM.Int256Ty ,
10491063 Builder.CreateBitCast (ImmutableCPtr, Int256PtrTy, " immutable.ptr" ));
10501064
1051- llvm::Value *HeapCPtr =
1052- Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Offset}, " heap.cptr" );
1065+ llvm::Value *HeapCPtr = Builder.CreateInBoundsGEP (
1066+ CGM.getHeapBase ()->getType ()->getPointerElementType (),
1067+ CGM.getHeapBase (), {Offset}, " heap.cptr" );
10531068 return Builder.CreateLoad (
1069+ CGM.Int256Ty ,
10541070 Builder.CreateBitCast (HeapCPtr, Int256PtrTy, " heap.ptr" ));
10551071 }
10561072 }
0 commit comments