Skip to content

Commit d16d29e

Browse files
committed
---
yaml --- r: 2287 b: refs/heads/master c: 593fb19 h: refs/heads/master i: 2285: 447b953 2283: 7922e3e 2279: 5b6ad72 2271: 1036899 v: v3
1 parent 9e6661e commit d16d29e

File tree

2 files changed

+27
-21
lines changed

2 files changed

+27
-21
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: c11d9f4268bede946b363568b309105d14fe93d0
2+
refs/heads/master: 593fb195a4c14252909745e6eec0d48a23061611

trunk/src/comp/middle/trans.rs

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,8 @@ fn get_simple_extern_fn(&hashmap[str, ValueRef] externs,
10421042
ret get_extern_fn(externs, llmod, name, lib.llvm.LLVMCCallConv, t);
10431043
}
10441044

1045-
fn trans_upcall(@block_ctxt cx, str name, vec[ValueRef] args) -> result {
1045+
fn trans_upcall(@block_ctxt cx, str name, vec[ValueRef] args, bool pure)
1046+
-> result {
10461047
auto cxx = cx.fcx.lcx.ccx;
10471048
auto lltaskptr = cx.build.PtrToInt(cx.fcx.lltaskptr, T_int());
10481049
auto args2 = vec(lltaskptr) + args;
@@ -1080,8 +1081,7 @@ fn trans_native_call(builder b, @glue_fns glues, ValueRef lltaskptr,
10801081
}
10811082

10821083
fn trans_non_gc_free(@block_ctxt cx, ValueRef v) -> result {
1083-
ret trans_upcall(cx, "upcall_free", vec(vp2i(cx, v),
1084-
C_int(0)));
1084+
ret trans_upcall(cx, "upcall_free", vec(vp2i(cx, v), C_int(0)), false);
10851085
}
10861086

10871087
fn find_scope_cx(@block_ctxt cx) -> @block_ctxt {
@@ -1503,7 +1503,7 @@ fn trans_raw_malloc(@block_ctxt cx, TypeRef llptr_ty, ValueRef llsize)
15031503
-> result {
15041504
// FIXME: need a table to collect tydesc globals.
15051505
auto tydesc = C_int(0);
1506-
auto rslt = trans_upcall(cx, "upcall_malloc", vec(llsize, tydesc));
1506+
auto rslt = trans_upcall(cx, "upcall_malloc", vec(llsize, tydesc), false);
15071507
rslt = res(rslt.bcx, vi2p(rslt.bcx, rslt.val, llptr_ty));
15081508
ret rslt;
15091509
}
@@ -1616,7 +1616,7 @@ fn get_tydesc(&@block_ctxt cx, ty.t t, bool escapes) -> result {
16161616
sz.val,
16171617
align.val,
16181618
C_int((1u + n_params) as int),
1619-
vp2i(bcx, tydescs)));
1619+
vp2i(bcx, tydescs)), true);
16201620

16211621
ret res(v.bcx, vi2p(v.bcx, v.val,
16221622
T_ptr(T_tydesc(cx.fcx.lcx.ccx.tn))));
@@ -1886,7 +1886,7 @@ fn make_drop_glue(@block_ctxt cx, ValueRef v0, ty.t t) {
18861886
case (ty.ty_port(_)) {
18871887
fn hit_zero(@block_ctxt cx, ValueRef v) -> result {
18881888
ret trans_upcall(cx, "upcall_del_port",
1889-
vec(vp2i(cx, v)));
1889+
vec(vp2i(cx, v)), true);
18901890
}
18911891
auto v = cx.build.Load(v0);
18921892
rslt = decr_refcnt_and_if_zero(cx, v,
@@ -1898,7 +1898,7 @@ fn make_drop_glue(@block_ctxt cx, ValueRef v0, ty.t t) {
18981898
case (ty.ty_chan(_)) {
18991899
fn hit_zero(@block_ctxt cx, ValueRef v) -> result {
19001900
ret trans_upcall(cx, "upcall_del_chan",
1901-
vec(vp2i(cx, v)));
1901+
vec(vp2i(cx, v)), true);
19021902
}
19031903
auto v = cx.build.Load(v0);
19041904
rslt = decr_refcnt_and_if_zero(cx, v,
@@ -4940,7 +4940,8 @@ fn trans_vec(@block_ctxt cx, vec[@ast.expr] args,
49404940
unit_sz.val);
49414941

49424942
// FIXME: pass tydesc properly.
4943-
auto sub = trans_upcall(bcx, "upcall_new_vec", vec(data_sz, C_int(0)));
4943+
auto sub = trans_upcall(bcx, "upcall_new_vec", vec(data_sz, C_int(0)),
4944+
false);
49444945
bcx = sub.bcx;
49454946

49464947
auto llty = type_of(bcx.fcx.lcx.ccx, t);
@@ -5301,14 +5302,16 @@ fn trans_log(int lvl, @block_ctxt cx, @ast.expr e) -> result {
53015302
if (is32bit) {
53025303
auto uval = trans_upcall(sub.bcx,
53035304
"upcall_log_float",
5304-
vec(C_int(lvl), sub.val));
5305+
vec(C_int(lvl), sub.val),
5306+
false);
53055307
uval.bcx.build.Br(after_cx.llbb);
53065308
} else {
53075309
auto tmp = alloca(sub.bcx, tr);
53085310
sub.bcx.build.Store(sub.val, tmp);
53095311
auto uval = trans_upcall(sub.bcx,
53105312
"upcall_log_double",
5311-
vec(C_int(lvl), vp2i(sub.bcx, tmp)));
5313+
vec(C_int(lvl), vp2i(sub.bcx, tmp)),
5314+
false);
53125315
uval.bcx.build.Br(after_cx.llbb);
53135316
}
53145317
} else {
@@ -5317,13 +5320,14 @@ fn trans_log(int lvl, @block_ctxt cx, @ast.expr e) -> result {
53175320
auto v = vp2i(sub.bcx, sub.val);
53185321
trans_upcall(sub.bcx,
53195322
"upcall_log_str",
5320-
vec(C_int(lvl), v)).bcx.build.Br(after_cx.llbb);
5323+
vec(C_int(lvl), v),
5324+
false).bcx.build.Br(after_cx.llbb);
53215325
}
53225326
case (_) {
53235327
auto v = vec(C_int(lvl), sub.val);
53245328
trans_upcall(sub.bcx,
53255329
"upcall_log_int",
5326-
v).bcx.build.Br(after_cx.llbb);
5330+
v, false).bcx.build.Br(after_cx.llbb);
53275331
}
53285332
}
53295333
}
@@ -5364,7 +5368,7 @@ fn trans_fail(@block_ctxt cx, option.t[common.span] sp_opt, str fail_str)
53645368

53655369
auto args = vec(V_fail_str, V_filename, C_int(V_line));
53665370

5367-
auto sub = trans_upcall(cx, "upcall_fail", args);
5371+
auto sub = trans_upcall(cx, "upcall_fail", args, false);
53685372
sub.bcx.build.Unreachable();
53695373
ret res(sub.bcx, C_nil());
53705374
}
@@ -5511,7 +5515,7 @@ fn trans_port(@block_ctxt cx, ast.ann ann) -> result {
55115515
auto bcx = cx;
55125516
auto unit_sz = size_of(bcx, unit_ty);
55135517
bcx = unit_sz.bcx;
5514-
auto sub = trans_upcall(bcx, "upcall_new_port", vec(unit_sz.val));
5518+
auto sub = trans_upcall(bcx, "upcall_new_port", vec(unit_sz.val), false);
55155519
bcx = sub.bcx;
55165520
auto llty = type_of(cx.fcx.lcx.ccx, t);
55175521
auto port_val = vi2p(bcx, sub.val, llty);
@@ -5528,7 +5532,7 @@ fn trans_chan(@block_ctxt cx, @ast.expr e, ast.ann ann) -> result {
55285532
bcx = prt.bcx;
55295533

55305534
auto prt_val = vp2i(bcx, prt.val);
5531-
auto sub = trans_upcall(bcx, "upcall_new_chan", vec(prt_val));
5535+
auto sub = trans_upcall(bcx, "upcall_new_chan", vec(prt_val), false);
55325536
bcx = sub.bcx;
55335537

55345538
auto chan_ty = node_ann_type(bcx.fcx.lcx.ccx, ann);
@@ -5571,7 +5575,7 @@ fn trans_send(@block_ctxt cx, @ast.expr lhs, @ast.expr rhs,
55715575

55725576
auto sub = trans_upcall(bcx, "upcall_send",
55735577
vec(vp2i(bcx, chn.val),
5574-
vp2i(bcx, data_alloc.val)));
5578+
vp2i(bcx, data_alloc.val)), false);
55755579
bcx = sub.bcx;
55765580

55775581
ret res(bcx, chn.val);
@@ -5599,7 +5603,7 @@ fn recv_val(@block_ctxt cx, ValueRef lhs, @ast.expr rhs,
55995603

56005604
auto sub = trans_upcall(bcx, "upcall_recv",
56015605
vec(vp2i(bcx, lhs),
5602-
vp2i(bcx, prt.val)));
5606+
vp2i(bcx, prt.val)), false);
56035607
bcx = sub.bcx;
56045608

56055609
auto data_load = load_if_immediate(bcx, lhs, unit_ty);
@@ -7109,11 +7113,12 @@ fn declare_intrinsics(ModuleRef llmod) -> hashmap[str,ValueRef] {
71097113

71107114

71117115
fn trace_str(@block_ctxt cx, str s) {
7112-
trans_upcall(cx, "upcall_trace_str", vec(p2i(C_cstr(cx.fcx.lcx.ccx, s))));
7116+
trans_upcall(cx, "upcall_trace_str", vec(p2i(C_cstr(cx.fcx.lcx.ccx, s))),
7117+
false);
71137118
}
71147119

71157120
fn trace_word(@block_ctxt cx, ValueRef v) {
7116-
trans_upcall(cx, "upcall_trace_word", vec(v));
7121+
trans_upcall(cx, "upcall_trace_word", vec(v), false);
71177122
}
71187123

71197124
fn trace_ptr(@block_ctxt cx, ValueRef v) {
@@ -7489,7 +7494,8 @@ fn trans_vec_append_glue(@local_ctxt cx) {
74897494
vec(vp2i(bcx, lldst_vec),
74907495
vec_fill_adjusted(bcx, llsrc_vec, llskipnull),
74917496
vp2i(bcx, llcopy_dst_ptr),
7492-
vp2i(bcx, llvec_tydesc)));
7497+
vp2i(bcx, llvec_tydesc)),
7498+
false);
74937499

74947500
bcx = llnew_vec_res.bcx;
74957501
auto llnew_vec = vi2p(bcx, llnew_vec_res.val,

0 commit comments

Comments
 (0)