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,20 @@ 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 (CGM. Int8Ty , CGM. getHeapBase (),
639+ {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}
644646
645647void CodeGenFunction::emitAsmCallMStore (const CallExpr *CE) {
646648 auto Arguments = CE->getArguments ();
647649 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
648- llvm::Value *CPtr =
649- Builder. CreateInBoundsGEP (CGM. getHeapBase (), {Pos}, " heap.cptr" );
650+ llvm::Value *CPtr = Builder. CreateInBoundsGEP (CGM. Int8Ty , CGM. getHeapBase (),
651+ {Pos}, " heap.cptr" );
650652 llvm::Value *Ptr = Builder.CreateBitCast (CPtr, Int256PtrTy, " heap.ptr" );
651653 Builder.CreateStore (
652654 CGM.getEndianlessValue (emitExpr (Arguments[1 ])->load (Builder, CGM)), Ptr);
@@ -656,16 +658,16 @@ void CodeGenFunction::emitAsmCallMStore(const CallExpr *CE) {
656658void CodeGenFunction::emitAsmCallMStore8 (const CallExpr *CE) {
657659 auto Arguments = CE->getArguments ();
658660 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
659- llvm::Value *Ptr =
660- Builder. CreateInBoundsGEP (CGM. getHeapBase (), {Pos}, " heap.ptr" );
661+ llvm::Value *Ptr = Builder. CreateInBoundsGEP (CGM. Int8Ty , CGM. getHeapBase (),
662+ {Pos}, " heap.ptr" );
661663 llvm::Value *Value = Builder.CreateZExtOrTrunc (
662664 emitExpr (Arguments[1 ])->load (Builder, CGM), CGM.Int8Ty );
663665 Builder.CreateStore (Value, Ptr);
664666 CGM.emitUpdateMemorySize (Pos, Builder.getIntN (256 , 1 ));
665667}
666668
667669llvm::Value *CodeGenFunction::emitAsmCallMSize (const CallExpr *CE) {
668- return Builder.CreateLoad (CGM.getMemorySize ());
670+ return Builder.CreateLoad (CGM.Int256Ty , CGM. getMemorySize ());
669671}
670672
671673llvm::Value *CodeGenFunction::emitAsmCallSLoad (const CallExpr *CE) {
@@ -688,8 +690,8 @@ void CodeGenFunction::emitAsmCallSStore(const CallExpr *CE) {
688690void CodeGenFunction::emitAsmCallReturn (const CallExpr *CE) {
689691 auto Arguments = CE->getArguments ();
690692 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
691- llvm::Value *Ptr =
692- Builder. CreateInBoundsGEP (CGM. getHeapBase (), {Pos}, " heap.cptr" );
693+ llvm::Value *Ptr = Builder. CreateInBoundsGEP (CGM. Int8Ty , CGM. getHeapBase (),
694+ {Pos}, " heap.cptr" );
693695 llvm::Value *Length = emitExpr (Arguments[1 ])->load (Builder, CGM);
694696 CGM.emitUpdateMemorySize (Pos, Length);
695697 CGM.emitFinish (Ptr, Builder.CreateZExtOrTrunc (Length, CGM.Int32Ty ));
@@ -698,8 +700,8 @@ void CodeGenFunction::emitAsmCallReturn(const CallExpr *CE) {
698700void CodeGenFunction::emitAsmCallRevert (const CallExpr *CE) {
699701 auto Arguments = CE->getArguments ();
700702 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
701- llvm::Value *Ptr =
702- Builder. CreateInBoundsGEP (CGM. getHeapBase (), {Pos}, " heap.cptr" );
703+ llvm::Value *Ptr = Builder. CreateInBoundsGEP (CGM. Int8Ty , CGM. getHeapBase (),
704+ {Pos}, " heap.cptr" );
703705 llvm::Value *Length = emitExpr (Arguments[1 ])->load (Builder, CGM);
704706 CGM.emitUpdateMemorySize (Pos, Length);
705707 CGM.emitRevert (Ptr, Builder.CreateZExtOrTrunc (Length, CGM.Int32Ty ));
@@ -714,8 +716,8 @@ void CodeGenFunction::emitAsmSelfDestruct(const CallExpr *CE) {
714716void CodeGenFunction::emitAsmCallLog (const CallExpr *CE) {
715717 auto Arguments = CE->getArguments ();
716718 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
717- llvm::Value *Data =
718- Builder. CreateInBoundsGEP (CGM. getHeapBase (), {Pos}, " heap.cptr" );
719+ llvm::Value *Data = Builder. CreateInBoundsGEP (CGM. Int8Ty , CGM. getHeapBase (),
720+ {Pos}, " heap.cptr" );
719721 llvm::Value *DataLength = emitExpr (Arguments[1 ])->load (Builder, CGM);
720722 std::vector<llvm::Value *> Topics;
721723 for (size_t I = 2 ; I < Arguments.size (); I++) {
@@ -739,8 +741,8 @@ llvm::Value *CodeGenFunction::emitAsmCallCallDataLoad(const CallExpr *CE) {
739741void CodeGenFunction::emitAsmCallCodeCopy (const CallExpr *CE) {
740742 auto Arguments = CE->getArguments ();
741743 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
742- llvm::Value *Ptr =
743- Builder. CreateInBoundsGEP (CGM. getHeapBase (), {Pos}, " heap.ptr" );
744+ llvm::Value *Ptr = Builder. CreateInBoundsGEP (CGM. Int8Ty , CGM. getHeapBase (),
745+ {Pos}, " heap.ptr" );
744746 llvm::Value *Code = Builder.CreateIntToPtr (
745747 emitExpr (Arguments[1 ])->load (Builder, CGM), Int8PtrTy);
746748 llvm::Value *Length = emitExpr (Arguments[2 ])->load (Builder, CGM);
@@ -802,8 +804,8 @@ llvm::Value *CodeGenFunction::emitAsmCallkeccak256(const CallExpr *CE) {
802804 // keccak256 function
803805 auto Arguments = CE->getArguments ();
804806 llvm::Value *Pos = emitExpr (Arguments[0 ])->load (Builder, CGM);
805- llvm::Value *Ptr =
806- Builder. CreateInBoundsGEP (CGM. getHeapBase (), {Pos}, " heap.cptr" );
807+ llvm::Value *Ptr = Builder. CreateInBoundsGEP (CGM. Int8Ty , CGM. getHeapBase (),
808+ {Pos}, " heap.cptr" );
807809 llvm::Value *Length = emitExpr (Arguments[1 ])->load (Builder, CGM);
808810 CGM.emitUpdateMemorySize (Pos, Length);
809811 return CGM.emitKeccak256 (Ptr, Length);
@@ -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
966968llvm::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
983985llvm::Value *CodeGenFunction::emitAsmByte (const CallExpr *CE) {
@@ -993,7 +995,7 @@ llvm::Value *CodeGenFunction::emitAsmByte(const CallExpr *CE) {
993995llvm::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
9991001llvm::Value *CodeGenFunction::emitAsmLinkersymbol (const CallExpr *CE) {
@@ -1014,14 +1016,15 @@ void CodeGenFunction::emitAsmSetImmutable(const CallExpr *CE) {
10141016 if (Map.find (StringRefName) != Map.end ()) {
10151017 llvm::Value *Offset = emitExpr (Arguments[0 ])->load (Builder, CGM);
10161018 llvm::Value *TableOffset = Builder.getInt (Map.lookup (StringRefName));
1017- llvm::Value *ImmutableCPtr = Builder.CreateInBoundsGEP (
1018- CGM.getImmutableBase (), {TableOffset}, " immutable.cptr" );
1019+ llvm::Value *ImmutableCPtr =
1020+ Builder.CreateInBoundsGEP (CGM.Int256Ty , CGM.getImmutableBase (),
1021+ {TableOffset}, " immutable.cptr" );
10191022 Builder.CreateStore (
10201023 Offset,
10211024 Builder.CreateBitCast (ImmutableCPtr, Int256PtrTy, " immutable.ptr" ));
10221025
1023- llvm::Value *HeapCPtr =
1024- Builder. CreateInBoundsGEP ( CGM.getHeapBase (), {Offset}, " heap.cptr" );
1026+ llvm::Value *HeapCPtr = Builder. CreateInBoundsGEP (
1027+ CGM. Int8Ty , CGM.getHeapBase (), {Offset}, " heap.cptr" );
10251028 Builder.CreateStore (
10261029 Value, Builder.CreateBitCast (HeapCPtr, Int256PtrTy, " heap.ptr" ));
10271030 CGM.emitUpdateMemorySize (Offset, Builder.getIntN (256 , 0x20 ));
@@ -1043,14 +1046,17 @@ llvm::Value *CodeGenFunction::emitAsmLoadImmutable(const CallExpr *CE) {
10431046 auto &Map = Ctx.getImmutableAddressMap ();
10441047 if (Map.find (StringRefName) != Map.end ()) {
10451048 llvm::Value *TableOffset = Builder.getInt (Map.lookup (StringRefName));
1046- llvm::Value *ImmutableCPtr = Builder.CreateInBoundsGEP (
1047- CGM.getImmutableBase (), {TableOffset}, " immutable.cptr" );
1049+ llvm::Value *ImmutableCPtr =
1050+ Builder.CreateInBoundsGEP (CGM.Int256Ty , CGM.getImmutableBase (),
1051+ {TableOffset}, " immutable.cptr" );
10481052 llvm::Value *Offset = Builder.CreateLoad (
1053+ CGM.Int256Ty ,
10491054 Builder.CreateBitCast (ImmutableCPtr, Int256PtrTy, " immutable.ptr" ));
10501055
1051- llvm::Value *HeapCPtr =
1052- Builder. CreateInBoundsGEP ( CGM.getHeapBase (), {Offset}, " heap.cptr" );
1056+ llvm::Value *HeapCPtr = Builder. CreateInBoundsGEP (
1057+ CGM. Int8Ty , CGM.getHeapBase (), {Offset}, " heap.cptr" );
10531058 return Builder.CreateLoad (
1059+ CGM.Int256Ty ,
10541060 Builder.CreateBitCast (HeapCPtr, Int256PtrTy, " heap.ptr" ));
10551061 }
10561062 }
0 commit comments