[LLVMdev] Make a comparation with IR builder

Manuele Conti manuele.conti at sirius-es.it
Fri Jan 11 05:20:04 PST 2013


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?

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
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130111/143d1513/attachment.html>


More information about the llvm-dev mailing list