@@ -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 ()) {
@@ -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