Commit Graph

624 Commits

Author SHA1 Message Date
Scott Olson
6503148589 Optimize reads of field projections of ByValPairs.
This helps in the case of field projections of the results of checked
binary operations. E.g.:

    _1 = CheckedAdd(const 1i32, const 2i32);
    assert(!(_1.1: bool), "attempt to add with overflow" -> bb1

Previously, the `_1.1` field projection lvalue would force_allocate `_1`
so it could read the memory in the old-style way. Now checked math with
its assertions will not allocate at all.

The oom2.rs compile-fail test had to be re-written, because the old
version of it no longer allocates _at all_ (yay!), so it would hit the
stack depth limit instead, from recursion.
2016-10-16 19:58:22 -06:00
Scott Olson
701eb3f62b Make locals debug printing smarter. 2016-10-16 17:18:56 -06:00
Scott Olson
7728de3e60 Do not force_allocate checked binop destination. 2016-10-16 17:18:06 -06:00
Scott Olson
3f67c4612c Refactor writing ByValPair to pointers. 2016-10-16 15:31:02 -06:00
Scott Olson
b1094f6c1e Deallocate primval conversion hack allocs.
It's a hack, sure, but it should learn some manners.
2016-10-16 03:21:41 -06:00
Scott Olson
55f2164bcd Do not force_allocate Deref base.
This makes `eval_lvalue` a bit less DRY for now, but it will be easier
to remove force_allocate in more places piecewise.
2016-10-16 02:57:59 -06:00
Scott Olson
e4f5b4b39a Do not force_allocate Ref destination. 2016-10-16 02:12:46 -06:00
Scott Olson
c1b97f1440 Pass thin self ptr to virtual calls. 2016-10-16 02:12:26 -06:00
Scott Olson
268bf9c185 Do not force_allocate CEnum destination. 2016-10-16 00:41:25 -06:00
Scott Olson
abf3e048ad Do not force_allocate Box destination. 2016-10-16 00:12:27 -06:00
Scott Olson
197e89bbb0 Refactor alloc_ptr. 2016-10-16 00:12:11 -06:00
Scott Olson
754dcc401d Do not force_allocate SwitchInt discrs. 2016-10-15 23:59:01 -06:00
Scott Olson
49e6c57ef9 Do not pre-allocate local variables.
Thanks to the `Value` locals refactoring, now primitive locals (ints,
floats, chars, bools, and the like) will not require `Allocation`s at
all, and locals that are never initialized at all because of conditional
control flow won't be wasting memory.
2016-10-15 23:31:42 -06:00
Scott Olson
6c463b7562 Hold an Lvalue for the return pointer in a frame.
Previously ReturnPointer was just the first slot in the locals array,
which had type `Vec<Pointer>`. But after my recent refactoring, locals
is `Vec<Value>` and it became increasingly hacky to pull a pointer out
of the first slot to be the value. Besides, that hack wouldn't allow
ReturnPointer to ever be an `Lvalue::Local`, referring directly to a
local on a higher stack frame.

Now ReturnPointer has no presence in the locals array, instead being
upgraded to its own field on `Frame`.

This introduces a couple of new hacks, detailed by some of my FIXME
comments, so that I could get the tests passing again and commit. More
commits coming soon should clean up these hacks without much trouble,
and overall I feel that the code is converging on a cleaner, more
efficient design.
2016-10-15 19:48:30 -06:00
Scott Olson
00ae07be07 Update for changes in rustc. 2016-10-14 22:59:50 -06:00
Scott Olson
65d3be0084 Add support for local Values in Lvalue.
The new `Lvalue` has an additional form, `Lvalue::Local`, with the old
form being `Lvalue::Ptr`. In an upcoming commit, we will start producing
the new form for locals, and enable reading and writing of primitive
locals without ever touching `Memory`.

Statics should be able to get a similar treatment, where primitive
statics can be stored and accessed without touching `Memory`.
2016-10-14 22:13:11 -06:00
Scott Olson
3d6dbb89dd Fix some long lines. 2016-10-14 03:52:23 -06:00
Scott Olson
8143a05812 Implement atomic_{load,store}. 2016-10-14 03:49:02 -06:00
Scott Olson
5f65ee2713 Refactor in preparation for Value locals.
Turning locals into `Vec<Value>` will allow writing `PrimVal` results
directly into the locals array without creating `memory::Allocation`s
for every local.

This will entail passing around a generalized kind of `Lvalue` instead
of `Pointer`s for the destinations of operations. Replacing `Pointer`
with `Lvalue` is mostly done with this commit, but expanding `Lvalue`
will come later.

This commit turns every local from `Pointer` into `Value::ByRef(ptr)`.
Locals which are `Value::ByVal(prim_val)` will come in a later commit.
2016-10-14 03:31:45 -06:00
Scott Olson
cb23b8d0a7 cargo update to fix compiletest build. 2016-10-09 17:50:01 -06:00
Scott Olson
911e46fb0e Update for changes in rustc. 2016-10-03 20:45:50 -06:00
Scott Olson
a08f0615fc Merge pull request #67 from oli-obk/master
fix multi field enum variants and some intrinsics + rustup
2016-10-03 17:40:02 -06:00
Oliver Schneider
de38015e47 rustup 2016-10-01 15:33:07 +02:00
Oliver Schneider
d9680dbb10 bump compiletest 2016-10-01 15:30:29 +02:00
Oliver Schneider
c9914cd3ae
fix enum variants with multiple fields 2016-09-30 10:45:52 +02:00
Oliver Schneider
8c666b30ed
remove some debug output 2016-09-30 10:45:13 +02:00
Oliver Schneider
18c8c852e4
factor out shared code 2016-09-29 16:42:01 +02:00
Oliver Schneider
f1c5bf2281
fix intrinsics and implement more of them 2016-09-29 15:58:26 +02:00
Scott Olson
2080faefa9 Merge pull request #65 from oli-obk/master
small fixes
2016-09-28 11:53:40 -06:00
Scott Olson
870bb4d862 Reword inline assembly error. 2016-09-28 11:48:43 -06:00
Oliver Schneider
787feaad4b
allow tuple field indexing into anonymous tuples 2016-09-28 18:22:53 +02:00
Oliver Schneider
51abf19e12
don't panic on asm! 2016-09-28 18:22:25 +02:00
Oliver Schneider
1c18f6ddfa
implement slice patterns 2016-09-28 18:22:09 +02:00
Oliver Schneider
73f6d6e418
fix run-pass test error message parsing 2016-09-28 14:53:43 +02:00
Oliver Schneider
9e9d05e3ef
run compile-fail tests after run-pass tests
it's annoying when debugging miri to have compile-fail tests fail due to some temporary
assertions or panics.
2016-09-28 14:53:11 +02:00
Scott Olson
6e13c3c983 Merge pull request #64 from oli-obk/bugfixes
Bugfixes
2016-09-27 13:11:38 -06:00
Oliver Schneider
f1f6205145
we can get the Session from the TyCtxt 2016-09-27 18:06:51 +02:00
Oliver Schneider
5b89f3fb94
implement Arc<T> -> Arc<Trait> unsizing 2016-09-27 18:01:33 +02:00
Oliver Schneider
622d407e0e
don't abort on the first failed test 2016-09-27 17:02:24 +02:00
Oliver Schneider
f4516e738b
be able to find statics in other crates 2016-09-27 17:02:04 +02:00
Oliver Schneider
db8185e439
print stacktrace when miri can't find the MIR for something 2016-09-27 17:01:06 +02:00
Oliver Schneider
69aeaea01f
rustup 2016-09-27 16:59:48 +02:00
Oliver Schneider
d6f1ba89ce
fix matching on chars
fixes #63
2016-09-27 11:10:25 +02:00
Scott Olson
10ab168db9 Merge pull request #60 from oli-obk/dst
some more cleanups getting rid of intermediate allocations and bad fat ptr assumptions
2016-09-27 02:46:57 -06:00
Oliver Schneider
7e29392ac4
fix warnings 2016-09-27 10:39:14 +02:00
Oliver Schneider
055c1b14f7
remove FIXME cleared up in the PR 2016-09-27 10:36:44 +02:00
Oliver Schneider
7b70f4fe2c
typecheck write_value for ByValPair 2016-09-27 10:33:47 +02:00
Oliver Schneider
d2d73a908d
reintroduce Lvalue and LvalueExtra 2016-09-27 10:14:53 +02:00
Oliver Schneider
e28f873756
actually error on failing miri-pass tests
+ remove a test that never succeeded
2016-09-26 17:49:53 +02:00
Oliver Schneider
5d1080d0ca
refactor Lvalue and PrimVal::{SlicePtr, VtablePtr} into Value::ByValPair 2016-09-26 17:49:30 +02:00