@@ -44,6 +44,12 @@ ProcessResult Variables::process(LLVMInstruction *ins)
4444LLVMInstruction *Variables::buildCreateLocalVariable (LLVMInstruction *ins)
4545{
4646 assert (ins->args .empty ());
47+ LLVMLocalVariableInfo *info = ins->localVarInfo ;
48+
49+ info->isInt = m_utils.addAlloca (m_builder.getInt1Ty ());
50+ info->intValue = m_utils.addAlloca (m_builder.getInt64Ty ());
51+ m_builder.CreateStore (m_builder.getInt1 (false ), info->isInt );
52+ m_builder.CreateStore (llvm::ConstantInt::get (m_builder.getInt64Ty (), 0 , true ), info->isInt );
4753
4854 LLVMConstantRegister null (ins->functionReturnReg ->type (), Value ());
4955 ins->functionReturnReg ->value = m_utils.createValue (&null);
@@ -55,22 +61,22 @@ LLVMInstruction *Variables::buildWriteLocalVariable(LLVMInstruction *ins)
5561 assert (ins->args .size () == 2 );
5662 const auto &arg1 = ins->args [0 ];
5763 const auto &arg2 = ins->args [1 ];
64+ LLVMLocalVariableInfo *info = ins->localVarInfo ;
5865 llvm::Value *typeVar = m_utils.addAlloca (m_builder.getInt32Ty ());
5966 m_builder.CreateStore (m_builder.getInt32 (static_cast <uint32_t >(m_utils.mapType (arg2.first ))), typeVar);
6067
61- // TODO: Add integer support for local variables
62- llvm::Value *isIntVar = m_utils.addAlloca (m_builder.getInt1Ty ());
63- llvm::Value *intVar = m_utils.addAlloca (m_builder.getInt64Ty ());
64-
65- m_utils.createValueStore (arg1.second ->value , typeVar, isIntVar, intVar, arg2.second , arg2.first , arg2.first );
68+ m_utils.createValueStore (arg1.second ->value , typeVar, info->isInt , info->intValue , arg2.second , arg2.first , arg2.first );
6669 return ins->next ;
6770}
6871
6972LLVMInstruction *Variables::buildReadLocalVariable (LLVMInstruction *ins)
7073{
7174 assert (ins->args .size () == 1 );
7275 const auto &arg = ins->args [0 ];
76+ LLVMLocalVariableInfo *info = ins->localVarInfo ;
7377 ins->functionReturnReg ->value = m_utils.castValue (arg.second , ins->functionReturnReg ->type ());
78+ ins->functionReturnReg ->isInt = m_builder.CreateLoad (m_builder.getInt1Ty (), info->isInt );
79+ ins->functionReturnReg ->intValue = m_builder.CreateLoad (m_builder.getInt64Ty (), info->intValue );
7480 return ins->next ;
7581}
7682
0 commit comments