LLVMValueRef gen_eq_rvalue(compile_t* c, ast_t* left, LLVMValueRef r_value) { ast_t* type = ast_type(left); bool sign = is_signed(c->opt, type); LLVMValueRef l_value = gen_expr(c, left); return make_cmp_value(c, sign, l_value, r_value, LLVMRealOEQ, LLVMIntEQ, LLVMIntEQ); }
LLVMValueRef gen_eq_rvalue(compile_t* c, ast_t* left, LLVMValueRef r_value) { ast_t* type = ast_type(left); bool sign = is_signed(type); LLVMValueRef l_value = gen_expr(c, left); LLVMValueRef test = make_cmp_value(c, sign, l_value, r_value, LLVMRealOEQ, LLVMIntEQ, LLVMIntEQ); return LLVMBuildZExt(c->builder, test, c->ibool, ""); }
static LLVMValueRef make_cmp(compile_t* c, ast_t* left, ast_t* right, LLVMRealPredicate cmp_f, LLVMIntPredicate cmp_si, LLVMIntPredicate cmp_ui) { ast_t* type = ast_type(left); bool sign = is_signed(c->opt, type); LLVMValueRef l_value = gen_expr(c, left); LLVMValueRef r_value = gen_expr(c, right); return make_cmp_value(c, sign, l_value, r_value, cmp_f, cmp_si, cmp_ui); }
static LLVMValueRef make_cmp(compile_t* c, ast_t* left, ast_t* right, LLVMRealPredicate cmp_f, LLVMIntPredicate cmp_si, LLVMIntPredicate cmp_ui) { ast_t* type = ast_type(left); bool sign = is_signed(type); LLVMValueRef l_value = gen_expr(c, left); LLVMValueRef r_value = gen_expr(c, right); LLVMValueRef test = make_cmp_value(c, sign, l_value, r_value, cmp_f, cmp_si, cmp_ui); return LLVMBuildZExt(c->builder, test, c->ibool, ""); }