diff options
author | Zoltan Varga <vargaz@gmail.com> | 2009-04-27 02:39:33 +0400 |
---|---|---|
committer | Zoltan Varga <vargaz@gmail.com> | 2009-04-27 02:39:33 +0400 |
commit | fa856a85b50d6adbac6b5d26b32bc608887551bc (patch) | |
tree | 61ccce1deed2ea34792327697b89ee8b003fdf05 | |
parent | 882733a116c4ba7de62cb51a58302bf9c37ae75e (diff) |
2009-04-27 Zoltan Varga <vargaz@gmail.com>moon-2.99.0.1moon-1.9.0
* mini-llvm.c (mono_llvm_emit_method): Implement OP_CHECK_THIS using
a volatile load. Get rid of get_tempname (), llvm assigns names
automatically.
* mini-llvm-cpp.cpp (mono_llvm_build_volatile_load): New instruction
builder function.
svn path=/trunk/mono/; revision=132691
-rw-r--r-- | mono/mini/ChangeLog | 7 | ||||
-rw-r--r-- | mono/mini/mini-llvm-cpp.cpp | 7 | ||||
-rw-r--r-- | mono/mini/mini-llvm-cpp.h | 4 | ||||
-rw-r--r-- | mono/mini/mini-llvm.c | 140 |
4 files changed, 81 insertions, 77 deletions
diff --git a/mono/mini/ChangeLog b/mono/mini/ChangeLog index 6e692780923..1c64437477e 100644 --- a/mono/mini/ChangeLog +++ b/mono/mini/ChangeLog @@ -1,5 +1,12 @@ 2009-04-27 Zoltan Varga <vargaz@gmail.com> + * mini-llvm.c (mono_llvm_emit_method): Implement OP_CHECK_THIS using + a volatile load. Get rid of get_tempname (), llvm assigns names + automatically. + + * mini-llvm-cpp.cpp (mono_llvm_build_volatile_load): New instruction + builder function. + * mini-llvm.c (mono_llvm_emit_method): Don't call LLVMGetParam on a value. diff --git a/mono/mini/mini-llvm-cpp.cpp b/mono/mini/mini-llvm-cpp.cpp index 04ee65d6d0a..a3ca993ae3f 100644 --- a/mono/mini/mini-llvm-cpp.cpp +++ b/mono/mini/mini-llvm-cpp.cpp @@ -196,6 +196,13 @@ mono_llvm_build_alloca (LLVMBuilderRef builder, LLVMTypeRef Ty, return wrap (unwrap (builder)->Insert (new AllocaInst(unwrap (Ty), unwrap (ArraySize), alignment), Name)); } +LLVMValueRef +mono_llvm_build_volatile_load (LLVMBuilderRef builder, LLVMValueRef PointerVal, + const char *Name) +{ + return wrap(unwrap(builder)->CreateLoad(unwrap(PointerVal), true, Name)); +} + static cl::list<const PassInfo*, bool, PassNameParser> PassList(cl::desc("Optimizations available:")); diff --git a/mono/mini/mini-llvm-cpp.h b/mono/mini/mini-llvm-cpp.h index 76c5ab9895b..6f784d67fac 100644 --- a/mono/mini/mini-llvm-cpp.h +++ b/mono/mini/mini-llvm-cpp.h @@ -38,6 +38,10 @@ mono_llvm_build_alloca (LLVMBuilderRef builder, LLVMTypeRef Ty, LLVMValueRef ArraySize, int alignment, const char *Name); +LLVMValueRef +mono_llvm_build_volatile_load (LLVMBuilderRef builder, LLVMValueRef PointerVal, + const char *Name); + G_END_DECLS #endif /* __MONO_MINI_LLVM_CPP_H__ */ diff --git a/mono/mini/mini-llvm.c b/mono/mini/mini-llvm.c index 056f7276eab..5621c6fd2f1 100644 --- a/mono/mini/mini-llvm.c +++ b/mono/mini/mini-llvm.c @@ -490,20 +490,6 @@ get_end_bb (EmitContext *ctx, MonoBasicBlock *bb) } /* - * get_tempname: - * - * Return a tempname required by the LLVM instruction builders. - */ -static const char* -get_tempname (EmitContext *ctx) -{ - // FIXME: - sprintf (ctx->temp_name, "s%d", ctx->sindex ++); - - return ctx->temp_name; -} - -/* * resolve_patch: * * Return the target of the patch identified by TYPE and TARGET. @@ -533,28 +519,28 @@ convert (EmitContext *ctx, LLVMValueRef v, LLVMTypeRef dtype) if (stype != dtype) { /* Extend */ if (dtype == LLVMInt64Type () && (stype == LLVMInt32Type () || stype == LLVMInt16Type () || stype == LLVMInt8Type ())) - return LLVMBuildSExt (ctx->builder, v, dtype, get_tempname (ctx)); + return LLVMBuildSExt (ctx->builder, v, dtype, ""); else if (dtype == LLVMInt32Type () && (stype == LLVMInt16Type () || stype == LLVMInt8Type ())) - return LLVMBuildSExt (ctx->builder, v, dtype, get_tempname (ctx)); + return LLVMBuildSExt (ctx->builder, v, dtype, ""); else if (dtype == LLVMInt16Type () && (stype == LLVMInt8Type ())) - return LLVMBuildSExt (ctx->builder, v, dtype, get_tempname (ctx)); + return LLVMBuildSExt (ctx->builder, v, dtype, ""); else if (dtype == LLVMDoubleType () && stype == LLVMFloatType ()) - return LLVMBuildFPExt (ctx->builder, v, dtype, get_tempname (ctx)); + return LLVMBuildFPExt (ctx->builder, v, dtype, ""); /* Trunc */ if (stype == LLVMInt64Type () && (dtype == LLVMInt32Type () || dtype == LLVMInt16Type () || dtype == LLVMInt8Type ())) - return LLVMBuildTrunc (ctx->builder, v, dtype, get_tempname (ctx)); + return LLVMBuildTrunc (ctx->builder, v, dtype, ""); if (stype == LLVMInt32Type () && (dtype == LLVMInt16Type () || dtype == LLVMInt8Type ())) - return LLVMBuildTrunc (ctx->builder, v, dtype, get_tempname (ctx)); + return LLVMBuildTrunc (ctx->builder, v, dtype, ""); if (stype == LLVMDoubleType () && dtype == LLVMFloatType ()) - return LLVMBuildFPTrunc (ctx->builder, v, dtype, get_tempname (ctx)); + return LLVMBuildFPTrunc (ctx->builder, v, dtype, ""); if (LLVMGetTypeKind (stype) == LLVMPointerTypeKind && LLVMGetTypeKind (dtype) == LLVMPointerTypeKind) - return LLVMBuildBitCast (ctx->builder, v, dtype, get_tempname (ctx)); + return LLVMBuildBitCast (ctx->builder, v, dtype, ""); if (LLVMGetTypeKind (dtype) == LLVMPointerTypeKind) - return LLVMBuildIntToPtr (ctx->builder, v, dtype, get_tempname (ctx)); + return LLVMBuildIntToPtr (ctx->builder, v, dtype, ""); if (LLVMGetTypeKind (stype) == LLVMPointerTypeKind) - return LLVMBuildPtrToInt (ctx->builder, v, dtype, get_tempname (ctx)); + return LLVMBuildPtrToInt (ctx->builder, v, dtype, ""); LLVMDumpValue (v); LLVMDumpValue (LLVMConstNull (dtype)); @@ -820,10 +806,10 @@ emit_reg_to_vtype (EmitContext *ctx, LLVMBuilderRef builder, MonoType *t, LLVMVa part_type = LLVMIntType (part_size * 8); index [0] = LLVMConstInt (LLVMInt32Type (), 0, FALSE); index [1] = LLVMConstInt (LLVMInt32Type (), j * sizeof (gpointer), FALSE); - addr = LLVMBuildGEP (builder, address, index, 2, get_tempname (ctx)); + addr = LLVMBuildGEP (builder, address, index, 2, ""); switch (ainfo->pair_storage [j]) { case LLVMArgInIReg: - LLVMBuildStore (builder, convert (ctx, regs [j], part_type), LLVMBuildBitCast (ctx->builder, addr, LLVMPointerType (part_type, 0), get_tempname (ctx))); + LLVMBuildStore (builder, convert (ctx, regs [j], part_type), LLVMBuildBitCast (ctx->builder, addr, LLVMPointerType (part_type, 0), "")); break; case LLVMArgNone: break; @@ -858,10 +844,10 @@ emit_vtype_to_reg (EmitContext *ctx, LLVMBuilderRef builder, MonoType *t, LLVMVa index [0] = LLVMConstInt (LLVMInt32Type (), 0, FALSE); index [1] = LLVMConstInt (LLVMInt32Type (), j * sizeof (gpointer), FALSE); - addr = LLVMBuildGEP (builder, address, index, 2, get_tempname (ctx)); + addr = LLVMBuildGEP (builder, address, index, 2, ""); switch (ainfo->pair_storage [j]) { case LLVMArgInIReg: - regs [pindex ++] = convert (ctx, LLVMBuildLoad (builder, LLVMBuildBitCast (ctx->builder, addr, LLVMPointerType (LLVMIntType (partsize * 8), 0), get_tempname (ctx)), get_tempname (ctx)), IntPtrType ()); + regs [pindex ++] = convert (ctx, LLVMBuildLoad (builder, LLVMBuildBitCast (ctx->builder, addr, LLVMPointerType (LLVMIntType (partsize * 8), 0), ""), ""), IntPtrType ()); break; case LLVMArgNone: break; @@ -898,7 +884,7 @@ emit_entry_bb (EmitContext *ctx, LLVMBuilderRef builder, int *pindexes) if (var->flags & (MONO_INST_VOLATILE|MONO_INST_INDIRECT) || MONO_TYPE_ISSTRUCT (var->inst_vtype)) { vtype = type_to_llvm_type (ctx, var->inst_vtype); CHECK_FAILURE (ctx); - ctx->addresses [var->dreg] = LLVMBuildAlloca (builder, vtype, get_tempname (ctx)); + ctx->addresses [var->dreg] = LLVMBuildAlloca (builder, vtype, ""); } } @@ -920,7 +906,7 @@ emit_entry_bb (EmitContext *ctx, LLVMBuilderRef builder, int *pindexes) else regs [1] = NULL; - ctx->addresses [reg] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &(mono_class_from_mono_type (sig->params [i])->byval_arg)), get_tempname (ctx)); + ctx->addresses [reg] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &(mono_class_from_mono_type (sig->params [i])->byval_arg)), ""); emit_reg_to_vtype (ctx, builder, sig->params [i], ctx->addresses [reg], ainfo, regs); } else if (ainfo->storage == LLVMArgVtypeByVal) { @@ -1162,7 +1148,7 @@ mono_llvm_emit_method (MonoCompile *cfg) MonoInst *var = get_vreg_to_inst (cfg, ins->sreg1); if (var && var->flags & (MONO_INST_VOLATILE|MONO_INST_INDIRECT)) { - lhs = LLVMBuildLoad (builder, addresses [ins->sreg1], get_tempname (ctx)); + lhs = LLVMBuildLoad (builder, addresses [ins->sreg1], ""); } else { /* It is ok for SETRET to have an uninitialized argument */ if (!values [ins->sreg1] && ins->opcode != OP_SETRET) @@ -1176,7 +1162,7 @@ mono_llvm_emit_method (MonoCompile *cfg) if (spec [MONO_INST_SRC2] != ' ' && spec [MONO_INST_SRC2] != ' ') { MonoInst *var = get_vreg_to_inst (cfg, ins->sreg2); if (var && var->flags & (MONO_INST_VOLATILE|MONO_INST_INDIRECT)) { - rhs = LLVMBuildLoad (builder, addresses [ins->sreg2], get_tempname (ctx)); + rhs = LLVMBuildLoad (builder, addresses [ins->sreg2], ""); } else { if (!values [ins->sreg2]) LLVM_FAILURE (ctx, "sreg2"); @@ -1254,9 +1240,9 @@ mono_llvm_emit_method (MonoCompile *cfg) g_assert (linfo->ret.pair_storage [0] == LLVMArgInIReg); g_assert (linfo->ret.pair_storage [1] == LLVMArgNone); - part1 = convert (ctx, LLVMBuildLoad (builder, LLVMBuildBitCast (builder, addresses [ins->sreg1], LLVMPointerType (LLVMIntType (size * 8), 0), get_tempname (ctx)), get_tempname (ctx)), IntPtrType ()); + part1 = convert (ctx, LLVMBuildLoad (builder, LLVMBuildBitCast (builder, addresses [ins->sreg1], LLVMPointerType (LLVMIntType (size * 8), 0), ""), ""), IntPtrType ()); - retval = LLVMBuildInsertValue (builder, LLVMGetUndef (ret_type), part1, 0, get_tempname (ctx)); + retval = LLVMBuildInsertValue (builder, LLVMGetUndef (ret_type), part1, 0, ""); LLVMBuildRet (builder, retval); break; @@ -1312,7 +1298,7 @@ mono_llvm_emit_method (MonoCompile *cfg) g_assert (ins->inst_offset % size == 0); index = LLVMConstInt (LLVMInt32Type (), ins->inst_offset / size, FALSE); - lhs = LLVMBuildLoad (builder, LLVMBuildGEP (builder, convert (ctx, values [ins->inst_basereg], LLVMPointerType (t, 0)), &index, 1, get_tempname (ctx)), get_tempname (ctx)); + lhs = LLVMBuildLoad (builder, LLVMBuildGEP (builder, convert (ctx, values [ins->inst_basereg], LLVMPointerType (t, 0)), &index, 1, ""), ""); } if (ins->opcode == OP_AMD64_ICOMPARE_MEMBASE_IMM) { lhs = convert (ctx, lhs, LLVMInt32Type ()); @@ -1346,13 +1332,13 @@ mono_llvm_emit_method (MonoCompile *cfg) /* We use COMPARE+SETcc/Bcc, llvm uses SETcc+br cond */ if (ins->opcode == OP_FCOMPARE) - cmp = LLVMBuildFCmp (builder, fpcond_to_llvm_cond [rel], convert (ctx, lhs, LLVMDoubleType ()), convert (ctx, rhs, LLVMDoubleType ()), get_tempname (ctx)); + cmp = LLVMBuildFCmp (builder, fpcond_to_llvm_cond [rel], convert (ctx, lhs, LLVMDoubleType ()), convert (ctx, rhs, LLVMDoubleType ()), ""); else if (ins->opcode == OP_COMPARE_IMM) - cmp = LLVMBuildICmp (builder, cond_to_llvm_cond [rel], convert (ctx, lhs, IntPtrType ()), LLVMConstInt (IntPtrType (), ins->inst_imm, FALSE), get_tempname (ctx)); + cmp = LLVMBuildICmp (builder, cond_to_llvm_cond [rel], convert (ctx, lhs, IntPtrType ()), LLVMConstInt (IntPtrType (), ins->inst_imm, FALSE), ""); else if (ins->opcode == OP_COMPARE) - cmp = LLVMBuildICmp (builder, cond_to_llvm_cond [rel], convert (ctx, lhs, IntPtrType ()), convert (ctx, rhs, IntPtrType ()), get_tempname (ctx)); + cmp = LLVMBuildICmp (builder, cond_to_llvm_cond [rel], convert (ctx, lhs, IntPtrType ()), convert (ctx, rhs, IntPtrType ()), ""); else - cmp = LLVMBuildICmp (builder, cond_to_llvm_cond [rel], lhs, rhs, get_tempname (ctx)); + cmp = LLVMBuildICmp (builder, cond_to_llvm_cond [rel], lhs, rhs, ""); if (MONO_IS_COND_BRANCH_OP (ins->next)) { LLVMBuildCondBr (builder, cmp, get_bb (ctx, ins->next->inst_true_bb), get_bb (ctx, ins->next->inst_false_bb)); @@ -1385,7 +1371,7 @@ mono_llvm_emit_method (MonoCompile *cfg) rel = mono_opcode_to_cond (ins->opcode); - cmp = LLVMBuildFCmp (builder, fpcond_to_llvm_cond [rel], convert (ctx, lhs, LLVMDoubleType ()), convert (ctx, rhs, LLVMDoubleType ()), get_tempname (ctx)); + cmp = LLVMBuildFCmp (builder, fpcond_to_llvm_cond [rel], convert (ctx, lhs, LLVMDoubleType ()), convert (ctx, rhs, LLVMDoubleType ()), ""); values [ins->dreg] = LLVMBuildZExt (builder, cmp, LLVMInt32Type (), dname); break; } @@ -1665,8 +1651,8 @@ mono_llvm_emit_method (MonoCompile *cfg) case OP_X86_LEA: { LLVMValueRef v1, v2; - v1 = LLVMBuildMul (builder, convert (ctx, rhs, IntPtrType ()), LLVMConstInt (IntPtrType (), (1 << ins->backend.shift_amount), FALSE), get_tempname (ctx)); - v2 = LLVMBuildAdd (builder, convert (ctx, lhs, IntPtrType ()), v1, get_tempname (ctx)); + v1 = LLVMBuildMul (builder, convert (ctx, rhs, IntPtrType ()), LLVMConstInt (IntPtrType (), (1 << ins->backend.shift_amount), FALSE), ""); + v2 = LLVMBuildAdd (builder, convert (ctx, lhs, IntPtrType ()), v1, ""); values [ins->dreg] = LLVMBuildAdd (builder, v2, LLVMConstInt (IntPtrType (), ins->inst_imm, FALSE), dname); break; } @@ -1687,7 +1673,7 @@ mono_llvm_emit_method (MonoCompile *cfg) sign = (ins->opcode == OP_ICONV_TO_I1) || (ins->opcode == OP_ICONV_TO_I2) || (ins->opcode == OP_ICONV_TO_I4) || (ins->opcode == OP_LCONV_TO_I1) || (ins->opcode == OP_LCONV_TO_I2); /* Have to do two casts since our vregs have type int */ - v = LLVMBuildTrunc (builder, lhs, conv_to_llvm_type (ins->opcode), get_tempname (ctx)); + v = LLVMBuildTrunc (builder, lhs, conv_to_llvm_type (ins->opcode), ""); if (sign) values [ins->dreg] = LLVMBuildSExt (builder, v, LLVMInt32Type (), dname); else @@ -1698,16 +1684,16 @@ mono_llvm_emit_method (MonoCompile *cfg) values [ins->dreg] = LLVMBuildFPToSI (builder, lhs, LLVMInt32Type (), dname); break; case OP_FCONV_TO_I1: - values [ins->dreg] = LLVMBuildSExt (builder, LLVMBuildFPToSI (builder, lhs, LLVMInt8Type (), dname), LLVMInt32Type (), get_tempname (ctx)); + values [ins->dreg] = LLVMBuildSExt (builder, LLVMBuildFPToSI (builder, lhs, LLVMInt8Type (), dname), LLVMInt32Type (), ""); break; case OP_FCONV_TO_U1: - values [ins->dreg] = LLVMBuildZExt (builder, LLVMBuildFPToUI (builder, lhs, LLVMInt8Type (), dname), LLVMInt32Type (), get_tempname (ctx)); + values [ins->dreg] = LLVMBuildZExt (builder, LLVMBuildFPToUI (builder, lhs, LLVMInt8Type (), dname), LLVMInt32Type (), ""); break; case OP_FCONV_TO_I2: - values [ins->dreg] = LLVMBuildSExt (builder, LLVMBuildFPToSI (builder, lhs, LLVMInt16Type (), dname), LLVMInt32Type (), get_tempname (ctx)); + values [ins->dreg] = LLVMBuildSExt (builder, LLVMBuildFPToSI (builder, lhs, LLVMInt16Type (), dname), LLVMInt32Type (), ""); break; case OP_FCONV_TO_U2: - values [ins->dreg] = LLVMBuildZExt (builder, LLVMBuildFPToUI (builder, lhs, LLVMInt16Type (), dname), LLVMInt32Type (), get_tempname (ctx)); + values [ins->dreg] = LLVMBuildZExt (builder, LLVMBuildFPToUI (builder, lhs, LLVMInt16Type (), dname), LLVMInt32Type (), ""); break; case OP_FCONV_TO_I8: values [ins->dreg] = LLVMBuildFPToSI (builder, lhs, LLVMInt64Type (), dname); @@ -1724,11 +1710,11 @@ mono_llvm_emit_method (MonoCompile *cfg) break; case OP_ICONV_TO_R4: case OP_LCONV_TO_R4: - v = LLVMBuildSIToFP (builder, lhs, LLVMFloatType (), get_tempname (ctx)); + v = LLVMBuildSIToFP (builder, lhs, LLVMFloatType (), ""); values [ins->dreg] = LLVMBuildFPExt (builder, v, LLVMDoubleType (), dname); break; case OP_FCONV_TO_R4: - v = LLVMBuildFPTrunc (builder, lhs, LLVMFloatType (), get_tempname (ctx)); + v = LLVMBuildFPTrunc (builder, lhs, LLVMFloatType (), ""); values [ins->dreg] = LLVMBuildFPExt (builder, v, LLVMDoubleType (), dname); break; case OP_SEXT_I4: @@ -1746,7 +1732,7 @@ mono_llvm_emit_method (MonoCompile *cfg) guint32 size = ins->inst_imm; size = (size + (MONO_ARCH_FRAME_ALIGNMENT - 1)) & ~ (MONO_ARCH_FRAME_ALIGNMENT - 1); - v = mono_llvm_build_alloca (builder, LLVMInt8Type (), LLVMConstInt (LLVMInt32Type (), size, FALSE), MONO_ARCH_FRAME_ALIGNMENT, get_tempname (ctx)); + v = mono_llvm_build_alloca (builder, LLVMInt8Type (), LLVMConstInt (LLVMInt32Type (), size, FALSE), MONO_ARCH_FRAME_ALIGNMENT, ""); if (ins->flags & MONO_INST_INIT) { LLVMValueRef args [4]; @@ -1783,7 +1769,7 @@ mono_llvm_emit_method (MonoCompile *cfg) t = load_store_to_llvm_type (ins->opcode, &size, &sext, &zext); if (sext || zext) - dname = (char*)get_tempname (ctx); + dname = (char*)""; g_assert (ins->inst_offset % size == 0); if ((ins->opcode == OP_LOADI8_MEM) || (ins->opcode == OP_LOAD_MEM) || (ins->opcode == OP_LOADI4_MEM) || (ins->opcode == OP_LOADU4_MEM)) { @@ -1792,7 +1778,7 @@ mono_llvm_emit_method (MonoCompile *cfg) values [ins->dreg] = LLVMBuildLoad (builder, convert (ctx, values [ins->inst_basereg], LLVMPointerType (t, 0)), dname); } else { index = LLVMConstInt (LLVMInt32Type (), ins->inst_offset / size, FALSE); - values [ins->dreg] = LLVMBuildLoad (builder, LLVMBuildGEP (builder, convert (ctx, values [ins->inst_basereg], LLVMPointerType (t, 0)), &index, 1, get_tempname (ctx)), dname); + values [ins->dreg] = LLVMBuildLoad (builder, LLVMBuildGEP (builder, convert (ctx, values [ins->inst_basereg], LLVMPointerType (t, 0)), &index, 1, ""), dname); } if (sext) values [ins->dreg] = LLVMBuildSExt (builder, values [ins->dreg], LLVMInt32Type (), dname); @@ -1819,7 +1805,7 @@ mono_llvm_emit_method (MonoCompile *cfg) g_assert (ins->inst_offset % size == 0); index = LLVMConstInt (LLVMInt32Type (), ins->inst_offset / size, FALSE); - LLVMBuildStore (builder, convert (ctx, values [ins->sreg1], t), LLVMBuildGEP (builder, convert (ctx, values [ins->inst_destbasereg], LLVMPointerType (t, 0)), &index, 1, get_tempname (ctx))); + LLVMBuildStore (builder, convert (ctx, values [ins->sreg1], t), LLVMBuildGEP (builder, convert (ctx, values [ins->inst_destbasereg], LLVMPointerType (t, 0)), &index, 1, "")); break; } @@ -1837,12 +1823,12 @@ mono_llvm_emit_method (MonoCompile *cfg) g_assert (ins->inst_offset % size == 0); index = LLVMConstInt (LLVMInt32Type (), ins->inst_offset / size, FALSE); - LLVMBuildStore (builder, convert (ctx, LLVMConstInt (LLVMInt32Type (), ins->inst_imm, FALSE), t), LLVMBuildGEP (builder, convert (ctx, values [ins->inst_destbasereg], LLVMPointerType (t, 0)), &index, 1, get_tempname (ctx))); + LLVMBuildStore (builder, convert (ctx, LLVMConstInt (LLVMInt32Type (), ins->inst_imm, FALSE), t), LLVMBuildGEP (builder, convert (ctx, values [ins->inst_destbasereg], LLVMPointerType (t, 0)), &index, 1, "")); break; } case OP_CHECK_THIS: - LLVMBuildLoad (builder, convert (ctx, values [ins->sreg1], LLVMPointerType (IntPtrType (), 0)), get_tempname (ctx)); + mono_llvm_build_volatile_load (builder, convert (ctx, values [ins->sreg1], LLVMPointerType (IntPtrType (), 0)), ""); break; case OP_OUTARG_VTRETADDR: break; @@ -1928,7 +1914,7 @@ mono_llvm_emit_method (MonoCompile *cfg) g_assert (ins->inst_offset % size == 0); index = LLVMConstInt (LLVMInt32Type (), ins->inst_offset / size, FALSE); - callee = convert (ctx, LLVMBuildLoad (builder, LLVMBuildGEP (builder, convert (ctx, values [ins->inst_basereg], LLVMPointerType (LLVMPointerType (IntPtrType (), 0), 0)), &index, 1, get_tempname (ctx)), get_tempname (ctx)), LLVMPointerType (llvm_sig, 0)); + callee = convert (ctx, LLVMBuildLoad (builder, LLVMBuildGEP (builder, convert (ctx, values [ins->inst_basereg], LLVMPointerType (LLVMPointerType (IntPtrType (), 0), 0)), &index, 1, ""), ""), LLVMPointerType (llvm_sig, 0)); // FIXME: mono_arch_get_vcall_slot () can't decode the code // generated by LLVM @@ -1951,8 +1937,8 @@ mono_llvm_emit_method (MonoCompile *cfg) pindex = 0; if (vretaddr) { if (!addresses [call->inst.dreg]) - addresses [call->inst.dreg] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &(mono_class_from_mono_type (sig->ret)->byval_arg)), get_tempname (ctx)); - args [pindex ++] = LLVMBuildPtrToInt (builder, addresses [call->inst.dreg], IntPtrType (), get_tempname (ctx)); + addresses [call->inst.dreg] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &(mono_class_from_mono_type (sig->ret)->byval_arg)), ""); + args [pindex ++] = LLVMBuildPtrToInt (builder, addresses [call->inst.dreg], IntPtrType (), ""); } for (i = 0; i < sig->param_count + sig->hasthis; ++i) { @@ -2018,7 +2004,7 @@ mono_llvm_emit_method (MonoCompile *cfg) LLVMValueRef regs [2]; if (!addresses [ins->dreg]) - addresses [ins->dreg] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &(mono_class_from_mono_type (sig->ret)->byval_arg)), get_tempname (ctx)); + addresses [ins->dreg] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &(mono_class_from_mono_type (sig->ret)->byval_arg)), ""); regs [0] = LLVMBuildExtractValue (builder, lcall, 0, ""); if (cinfo->ret.pair_storage [1] != LLVMArgNone) @@ -2035,7 +2021,7 @@ mono_llvm_emit_method (MonoCompile *cfg) indexes [0] = LLVMConstInt (LLVMInt32Type (), 0, FALSE); indexes [1] = LLVMConstInt (LLVMInt32Type (), (gssize)ins->inst_p0, FALSE); - values [ins->dreg] = LLVMBuildLoad (builder, LLVMBuildGEP (builder, ctx->got_var, indexes, 2, get_tempname (ctx)), dname); + values [ins->dreg] = LLVMBuildLoad (builder, LLVMBuildGEP (builder, ctx->got_var, indexes, 2, ""), dname); break; } case OP_THROW: { @@ -2098,25 +2084,25 @@ mono_llvm_emit_method (MonoCompile *cfg) case OP_IMIN: case OP_LMIN: { - LLVMValueRef v = LLVMBuildICmp (builder, LLVMIntSLE, lhs, rhs, get_tempname (ctx)); + LLVMValueRef v = LLVMBuildICmp (builder, LLVMIntSLE, lhs, rhs, ""); values [ins->dreg] = LLVMBuildSelect (builder, v, lhs, rhs, dname); break; } case OP_IMAX: case OP_LMAX: { - LLVMValueRef v = LLVMBuildICmp (builder, LLVMIntSGE, lhs, rhs, get_tempname (ctx)); + LLVMValueRef v = LLVMBuildICmp (builder, LLVMIntSGE, lhs, rhs, ""); values [ins->dreg] = LLVMBuildSelect (builder, v, lhs, rhs, dname); break; } case OP_IMIN_UN: case OP_LMIN_UN: { - LLVMValueRef v = LLVMBuildICmp (builder, LLVMIntULE, lhs, rhs, get_tempname (ctx)); + LLVMValueRef v = LLVMBuildICmp (builder, LLVMIntULE, lhs, rhs, ""); values [ins->dreg] = LLVMBuildSelect (builder, v, lhs, rhs, dname); break; } case OP_IMAX_UN: case OP_LMAX_UN: { - LLVMValueRef v = LLVMBuildICmp (builder, LLVMIntUGE, lhs, rhs, get_tempname (ctx)); + LLVMValueRef v = LLVMBuildICmp (builder, LLVMIntUGE, lhs, rhs, ""); values [ins->dreg] = LLVMBuildSelect (builder, v, lhs, rhs, dname); break; } @@ -2147,7 +2133,7 @@ mono_llvm_emit_method (MonoCompile *cfg) args [0] = convert (ctx, lhs, LLVMPointerType (LLVMInt32Type (), 0)); args [1] = rhs; - values [ins->dreg] = LLVMBuildAdd (builder, LLVMBuildCall (builder, LLVMGetNamedFunction (module, "llvm.atomic.load.add.i32.p0i32"), args, 2, get_tempname (ctx)), args [1], dname); + values [ins->dreg] = LLVMBuildAdd (builder, LLVMBuildCall (builder, LLVMGetNamedFunction (module, "llvm.atomic.load.add.i32.p0i32"), args, 2, ""), args [1], dname); break; } case OP_ATOMIC_ADD_NEW_I8: { @@ -2157,7 +2143,7 @@ mono_llvm_emit_method (MonoCompile *cfg) args [0] = convert (ctx, lhs, LLVMPointerType (LLVMInt64Type (), 0)); args [1] = convert (ctx, rhs, LLVMInt64Type ()); - values [ins->dreg] = LLVMBuildAdd (builder, LLVMBuildCall (builder, LLVMGetNamedFunction (module, "llvm.atomic.load.add.i64.p0i64"), args, 2, get_tempname (ctx)), args [1], dname); + values [ins->dreg] = LLVMBuildAdd (builder, LLVMBuildCall (builder, LLVMGetNamedFunction (module, "llvm.atomic.load.add.i64.p0i64"), args, 2, ""), args [1], dname); break; } case OP_ATOMIC_CAS_I4: @@ -2217,7 +2203,7 @@ mono_llvm_emit_method (MonoCompile *cfg) g_assert (func); val = LLVMBuildCall (builder, func, args, 2, ""); values [ins->dreg] = LLVMBuildExtractValue (builder, val, 0, dname); - ovf = LLVMBuildExtractValue (builder, val, 1, get_tempname (ctx)); + ovf = LLVMBuildExtractValue (builder, val, 1, ""); emit_cond_system_exception (ctx, bb, "OverflowException", ovf); builder = ctx->builder; break; @@ -2240,7 +2226,7 @@ mono_llvm_emit_method (MonoCompile *cfg) break; } - args [0] = LLVMBuildBitCast (builder, addresses [ins->dreg], LLVMPointerType (LLVMInt8Type (), 0), get_tempname (ctx)); + args [0] = LLVMBuildBitCast (builder, addresses [ins->dreg], LLVMPointerType (LLVMInt8Type (), 0), ""); args [1] = LLVMConstInt (LLVMInt8Type (), 0, FALSE); args [2] = LLVMConstInt (LLVMInt32Type (), mono_class_value_size (klass, NULL), FALSE); // FIXME: Alignment @@ -2263,22 +2249,22 @@ mono_llvm_emit_method (MonoCompile *cfg) switch (ins->opcode) { case OP_STOREV_MEMBASE: - src = LLVMBuildBitCast (builder, addresses [ins->sreg1], LLVMPointerType (LLVMInt8Type (), 0), get_tempname (ctx)); - dst = convert (ctx, LLVMBuildAdd (builder, convert (ctx, values [ins->inst_destbasereg], IntPtrType ()), LLVMConstInt (IntPtrType (), ins->inst_offset, FALSE), get_tempname (ctx)), LLVMPointerType (LLVMInt8Type (), 0)); + src = LLVMBuildBitCast (builder, addresses [ins->sreg1], LLVMPointerType (LLVMInt8Type (), 0), ""); + dst = convert (ctx, LLVMBuildAdd (builder, convert (ctx, values [ins->inst_destbasereg], IntPtrType ()), LLVMConstInt (IntPtrType (), ins->inst_offset, FALSE), ""), LLVMPointerType (LLVMInt8Type (), 0)); break; case OP_LOADV_MEMBASE: if (!addresses [ins->dreg]) - addresses [ins->dreg] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &klass->byval_arg), get_tempname (ctx)); - src = convert (ctx, LLVMBuildAdd (builder, convert (ctx, values [ins->inst_basereg], IntPtrType ()), LLVMConstInt (IntPtrType (), ins->inst_offset, FALSE), get_tempname (ctx)), LLVMPointerType (LLVMInt8Type (), 0)); - dst = LLVMBuildBitCast (builder, addresses [ins->dreg], LLVMPointerType (LLVMInt8Type (), 0), get_tempname (ctx)); + addresses [ins->dreg] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &klass->byval_arg), ""); + src = convert (ctx, LLVMBuildAdd (builder, convert (ctx, values [ins->inst_basereg], IntPtrType ()), LLVMConstInt (IntPtrType (), ins->inst_offset, FALSE), ""), LLVMPointerType (LLVMInt8Type (), 0)); + dst = LLVMBuildBitCast (builder, addresses [ins->dreg], LLVMPointerType (LLVMInt8Type (), 0), ""); break; case OP_VMOVE: if (!addresses [ins->sreg1]) - addresses [ins->sreg1] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &klass->byval_arg), get_tempname (ctx)); + addresses [ins->sreg1] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &klass->byval_arg), ""); if (!addresses [ins->dreg]) - addresses [ins->dreg] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &klass->byval_arg), get_tempname (ctx)); - src = LLVMBuildBitCast (builder, addresses [ins->sreg1], LLVMPointerType (LLVMInt8Type (), 0), get_tempname (ctx)); - dst = LLVMBuildBitCast (builder, addresses [ins->dreg], LLVMPointerType (LLVMInt8Type (), 0), get_tempname (ctx)); + addresses [ins->dreg] = LLVMBuildAlloca (builder, type_to_llvm_type (ctx, &klass->byval_arg), ""); + src = LLVMBuildBitCast (builder, addresses [ins->sreg1], LLVMPointerType (LLVMInt8Type (), 0), ""); + dst = LLVMBuildBitCast (builder, addresses [ins->dreg], LLVMPointerType (LLVMInt8Type (), 0), ""); break; default: g_assert_not_reached (); |