On 11 March 2017 at 14:12, Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> wrote: > On Sat, Mar 11, 2017 at 01:36:30PM +0000, Dibyendu Majumdar wrote: >> > Here you're hitting the OP_SET{EQ,...} case. >> > >> >> Here is my attempt to fix: >> >> static struct symbol *pseudo_get_type(pseudo_t pseudo) { >> switch (pseudo->type) { >> case PSEUDO_SYM: >> case PSEUDO_ARG: >> return pseudo->sym; >> case PSEUDO_PHI: >> case PSEUDO_REG: >> return pseudo->def->type; >> default: >> assert(0); >> return NULL; >> } >> } >> static void output_op_compare(struct function *fn, struct instruction *insn) >> { >> LLVMValueRef lhs, rhs, target; >> char target_name[64]; >> if (insn->src1->type == PSEUDO_VAL) >> lhs = val_to_value(fn, insn->src1->value, pseudo_get_type(insn->src2)); >> else >> lhs = pseudo_to_value(fn, insn, insn->src1); >> if (insn->src2->type == PSEUDO_VAL) >> //rhs = LLVMConstInt(LLVMTypeOf(lhs), insn->src2->value, 1); >> rhs = val_to_value(fn, insn->src2->value, pseudo_get_type(insn->src1)); >> else >> rhs = pseudo_to_value(fn, insn, insn->src2); >> >> >> Does this look like the right thing to do? > > I didn't tested it but it looks correct and it is certainly OK for now. > I made the patch "give a type to PSEUDO_ARGs" with this in mind. > > I'll take it the others ones. > Good news is that with this fix and by using a function pointer call syntax that doesn't use (*f)() - I am able to successfully compile an AVL Tree implementation. Whether the generated code is correct is still to be checked but this is a big step forward I think - so many thanks for the help! > However I'm slowly looking at a more generic solution. > For example, it would certainly be easier if there would be a > OP_PTRCAST between a constant-value-used-as-a-pointer and its use. > The cost would be some missing optimizations, or more complex ones > or a sort of normalization pass. > I still think pseudo values should have a type - then we won't need all the complexity! Regards Dibyendu -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html