volatile loads must not be simplified
memops.c:simplify_loads() tries to simplify all loads,
even volatile ones.
For example, on the following code:
static int foo(volatile int *a, int v)
{
*a = v;
return *a;
}
test-linearize returns something like:
foo:
store.32 %arg2 -> 0[%arg1]
ret.32 %arg2
while the correct output is more like:
foo:
store.32 %arg2 -> 0[%arg1]
load.32 %r5 <- 0[%arg1]
ret.32 %r5
The fix is to simply ignore loads with the 'volatile' modifier.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Signed-off-by: Christopher Li <sparse@chrisli.org>