[LLVMdev] Make a comparation with IR builder

Manuele Conti manuele.conti at sirius-es.it
Sat Jan 12 10:16:00 PST 2013


Hi Justin,
today I followed your suggestion and it work!!
Many Thanks.
Manuele

Il 11/01/2013 14:30, Justin Holewinski ha scritto:
> On Fri, Jan 11, 2013 at 8:20 AM, Manuele Conti 
> <manuele.conti at sirius-es.it <mailto:manuele.conti at sirius-es.it>> wrote:
>
>     Hi Justin,
>     my class is a visitor pattern and I use accept method to go
>     recursive in suboject in my AST.
>     In locals I store AllocaInst pointer.
>
>     void *visit(var1_init_decl_c *symbol) {
>        llvm::Type *lType;
>
>        varNames.clear();
>        varType = "";
>        symbol->var1_list->accept(*this); /* get a vector contains variable names */
>        symbol->spec_init->accept(*this); /* Store in varType variable list */
>        lType = typeOf(varType);
>        for (unsigned int i = 0; i < varNames.size(); i++) {
>     	  AllocaInst *alloc = new AllocaInst(lType, varNames[i].c_str(), currentBBlock);
>     	  locals[varNames[i]] = alloc;
>        }
>
>        return NULL;
>     }
>
>     Can I load a AllocaInst using CreateLoad instruction?
>
>
> Yes, your generated alloca is actually returning a "pointer of lType" 
> type.  You need to load the value to an "lType" type.  If lType is 
> i32, then alloca returns an i32*.
>
>     Cheers,
>     Manuele
>
>     Il 11/01/2013 12:56, Justin Holewinski ha scritto:
>>
>>     you're not showing enough code.  What does accept() do?
>>
>>     Based on your description, I strongly suspect that your alloca
>>     and constant are not the same type.  Remember that alloca returns
>>     a pointer type that you must load to get at the actual variable.
>>
>>     On Jan 11, 2013 3:28 AM, "Manuele Conti"
>>     <manuele.conti at sirius-es.it <mailto:manuele.conti at sirius-es.it>>
>>     wrote:
>>
>>         Hi All,
>>         I'm writing a code generation with my compiler. I read sever
>>         example and documentation but I did understand what I make wrong.
>>         What I try to do is a compare a local variable with a constant.
>>         But when I create a ICMP instruction I get that instruction
>>         are not of same type.
>>         I'm using llvm by svn repository updated at two week ago.
>>
>>         The code that I try to generation is something like:
>>
>>         if varInt = 1 then
>>            varInt := 10;
>>         end_if;
>>
>>
>>         This is my code:
>>
>>         void *visit(integer_c *symbol)            {
>>                 int64_t value = GET_CVALUE(int64, symbol);
>>                 if (typeid(*currentType) ==
>>         typeid(get_datatype_info_c::bool_type_name))  {
>>                   std::cout << "Creating integer: " << value <<
>>         std::endl;
>>                   return (void
>>         *)ConstantInt::get(Type::getInt1Ty(getGlobalContext()),
>>         value, false);
>>                 }
>>                 return (void
>>         *)ConstantInt::get(Type::getInt16Ty(getGlobalContext()),
>>         value, false);
>>         }
>>
>>         void *visit(symbolic_variable_c *symbol) {
>>           std::string varName;
>>           AllocaInst *alloc;
>>
>>           varName = get_var_name_c::get_name(symbol->var_name)->value;
>>           alloc = locals[varName];
>>
>>           return (void *)alloc;
>>         }
>>
>>         void *visit(equ_expression_c *symbol) {
>>                 Value *lValue;
>>                 Value *rValue;
>>
>>                 lValue = (Value *)symbol->l_exp->accept(*this);
>>                 rValue = (Value *)symbol->r_exp->accept(*this);
>>
>>                 return Builder.CreateICmpEQ (lValue, rValue, "cond");
>>
>>         }
>>
>>          Cheers,
>>         Manuele
>>
>>
>>
>>
>>         _______________________________________________
>>         LLVM Developers mailing list
>>         LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>>         http://llvm.cs.uiuc.edu
>>         http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>
>
>     _______________________________________________
>     LLVM Developers mailing list
>     LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>     http://llvm.cs.uiuc.edu
>     http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
>
> -- 
>
> Thanks,
>
> Justin Holewinski

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130112/8f03925b/attachment.html>


More information about the llvm-dev mailing list