55#include " ../llvmbuildutils.h"
66#include " ../llvmconstantregister.h"
77#include " ../llvmcompilercontext.h"
8+ #include " ../../optimizationutils.h"
89
910using namespace libscratchcpp ;
1011using namespace libscratchcpp ::llvmins;
@@ -95,7 +96,8 @@ LLVMInstruction *Lists::buildRemoveListItem(LLVMInstruction *ins)
9596 llvm::Function *function = m_utils.function ();
9697
9798 assert (ins->args .size () == 1 );
98- const auto &arg = ins->args [0 ];
99+ const auto &args = ins->getArgs ();
100+ const auto &arg = args[0 ];
99101
100102 LLVMListPtr &listPtr = m_utils.listPtr (ins->targetList );
101103
@@ -130,8 +132,9 @@ LLVMInstruction *Lists::buildAppendToList(LLVMInstruction *ins)
130132 llvm::Function *function = m_utils.function ();
131133
132134 assert (ins->args .size () == 1 );
133- const auto &arg = ins->args [0 ];
134- Compiler::StaticType type = m_utils.optimizeRegisterType (arg.second );
135+ const auto &args = ins->getArgs ();
136+ const auto &arg = args[0 ];
137+ Compiler::StaticType type = OptimizationUtils::optimizeValueType (m_utils.compilerCtx (), arg.second );
135138 LLVMListPtr &listPtr = m_utils.listPtr (ins->targetList );
136139
137140 // Check if enough space is allocated
@@ -179,9 +182,10 @@ LLVMInstruction *Lists::buildInsertToList(LLVMInstruction *ins)
179182 llvm::Function *function = m_utils.function ();
180183
181184 assert (ins->args .size () == 2 );
182- const auto &indexArg = ins->args [0 ];
183- const auto &valueArg = ins->args [1 ];
184- Compiler::StaticType type = m_utils.optimizeRegisterType (valueArg.second );
185+ const auto &args = ins->getArgs ();
186+ const auto &indexArg = args[0 ];
187+ const auto &valueArg = args[1 ];
188+ Compiler::StaticType type = OptimizationUtils::optimizeValueType (m_utils.compilerCtx (), valueArg.second );
185189 LLVMListPtr &listPtr = m_utils.listPtr (ins->targetList );
186190
187191 // Range check
@@ -225,9 +229,10 @@ LLVMInstruction *Lists::buildListReplace(LLVMInstruction *ins)
225229 llvm::Function *function = m_utils.function ();
226230
227231 assert (ins->args .size () == 2 );
228- const auto &indexArg = ins->args [0 ];
229- const auto &valueArg = ins->args [1 ];
230- Compiler::StaticType type = m_utils.optimizeRegisterType (valueArg.second );
232+ const auto &args = ins->getArgs ();
233+ const auto &indexArg = args[0 ];
234+ const auto &valueArg = args[1 ];
235+ Compiler::StaticType type = OptimizationUtils::optimizeValueType (m_utils.compilerCtx (), valueArg.second );
231236 LLVMListPtr &listPtr = m_utils.listPtr (ins->targetList );
232237
233238 Compiler::StaticType listType = ins->targetType ;
@@ -272,7 +277,7 @@ LLVMInstruction *Lists::buildGetListContents(LLVMInstruction *ins)
272277 const LLVMListPtr &listPtr = m_utils.listPtr (ins->targetList );
273278 llvm::Value *ptr = m_utils.addStringAlloca ();
274279 m_builder.CreateCall (m_utils.functions ().resolve_list_to_string (), { listPtr.ptr , ptr });
275- ins->functionReturnReg ->value = ptr;
280+ ins->getFunctionReturnReg () ->value = ptr;
276281
277282 return ins->getNext ();
278283}
@@ -285,12 +290,13 @@ LLVMInstruction *Lists::buildGetListItem(LLVMInstruction *ins)
285290 // Return empty string for empty lists
286291 if (ins->targetType == Compiler::StaticType::Void) {
287292 LLVMConstantRegister nullReg (Compiler::StaticType::String, " " );
288- ins->functionReturnReg ->value = m_utils.createValue (static_cast <LLVMRegister *>(&nullReg));
293+ ins->getFunctionReturnReg () ->value = m_utils.createValue (static_cast <LLVMRegister *>(&nullReg));
289294 return ins->getNext ();
290295 }
291296
292297 assert (ins->args .size () == 1 );
293- const auto &arg = ins->args [0 ];
298+ const auto &args = ins->getArgs ();
299+ const auto &arg = args[0 ];
294300 LLVMListPtr &listPtr = m_utils.listPtr (ins->targetList );
295301
296302 // Range check
@@ -327,8 +333,8 @@ LLVMInstruction *Lists::buildGetListItem(LLVMInstruction *ins)
327333 itemTypeResult->addIncoming (stringType, outOfRangeBlock);
328334
329335 llvm::Value *typeVar = createListTypeVar (listPtr, itemTypeResult);
330- ins->functionReturnReg ->value = result;
331- ins->functionReturnReg ->typeVar = typeVar;
336+ ins->getFunctionReturnReg () ->value = result;
337+ ins->getFunctionReturnReg () ->typeVar = typeVar;
332338 createListTypeAssumption (listPtr, typeVar, ins->targetType , inRange);
333339
334340 return ins->getNext ();
@@ -339,35 +345,37 @@ LLVMInstruction *Lists::buildGetListSize(LLVMInstruction *ins)
339345 assert (ins->args .size () == 0 );
340346 const LLVMListPtr &listPtr = m_utils.listPtr (ins->targetList );
341347 llvm::Value *size = m_utils.getListSize (listPtr);
342- ins->functionReturnReg ->value = m_builder.CreateUIToFP (size, m_builder.getDoubleTy ());
343- ins->functionReturnReg ->isInt = m_builder.getInt1 (true );
344- ins->functionReturnReg ->intValue = size;
348+ ins->getFunctionReturnReg () ->value = m_builder.CreateUIToFP (size, m_builder.getDoubleTy ());
349+ ins->getFunctionReturnReg () ->isInt = m_builder.getInt1 (true );
350+ ins->getFunctionReturnReg () ->intValue = size;
345351
346352 return ins->getNext ();
347353}
348354
349355LLVMInstruction *Lists::buildGetListItemIndex (LLVMInstruction *ins)
350356{
351357 assert (ins->args .size () == 1 );
352- const auto &arg = ins->args [0 ];
358+ const auto &args = ins->getArgs ();
359+ const auto &arg = args[0 ];
353360 LLVMListPtr &listPtr = m_utils.listPtr (ins->targetList );
354361
355362 Compiler::StaticType listType = ins->targetType ;
356363
357- ins->functionReturnReg ->value = m_builder.CreateSIToFP (m_utils.getListItemIndex (listPtr, listType, arg.second ), m_builder.getDoubleTy ());
364+ ins->getFunctionReturnReg () ->value = m_builder.CreateSIToFP (m_utils.getListItemIndex (listPtr, listType, arg.second ), m_builder.getDoubleTy ());
358365 return ins->getNext ();
359366}
360367
361368LLVMInstruction *Lists::buildListContainsItem (LLVMInstruction *ins)
362369{
363370 assert (ins->args .size () == 1 );
364- const auto &arg = ins->args [0 ];
371+ const auto &args = ins->getArgs ();
372+ const auto &arg = args[0 ];
365373 LLVMListPtr &listPtr = m_utils.listPtr (ins->targetList );
366374
367375 Compiler::StaticType listType = ins->targetType ;
368376
369377 llvm::Value *index = m_utils.getListItemIndex (listPtr, listType, arg.second );
370- ins->functionReturnReg ->value = m_builder.CreateICmpSGT (index, llvm::ConstantInt::get (m_builder.getInt64Ty (), -1 , true ));
378+ ins->getFunctionReturnReg () ->value = m_builder.CreateICmpSGT (index, llvm::ConstantInt::get (m_builder.getInt64Ty (), -1 , true ));
371379
372380 return ins->getNext ();
373381}
0 commit comments