- 27 Jun, 2016 4 commits
-
-
Manasij Mukherjee authored
Reduces register pressure and the number of push/pops slightly. BUG=none R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2100333002 .
-
Thomas Lively authored
BUG=https://bugs.chromium.org/p/nativeclient/issues/detail?id=4374 R=kschimpf@google.com Review URL: https://codereview.chromium.org/2095763002 .
-
Manasij Mukherjee authored
Index=Var Or Const to Index=Var + Const when Var = Var' << N and log2(Const) <= N or when Var = (2^M) * (2^N) and log2(Const) <= (M+N) BUG=none R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2085383002 .
-
Jim Stichnoth authored
When we skip translating an item due to the -translate-only option, we still need to add a dummy item to the work queue with the proper sequence number, otherwise the emitter thread waits endlessly for the next sequence number and never emits the rest of the items. BUG= none R=jpp@chromium.org Review URL: https://codereview.chromium.org/2099293002 .
-
- 25 Jun, 2016 4 commits
-
-
Jim Stichnoth authored
When running with -asm-verbose, assembler directives like the following are generated: lv$__123 = 16 These symbols show up in "nm" output of the .o file, and cause inconsistencies in symbol numbering between filetype=asm and filetype=obj, when doing szbuild.py bisection debugging. The fix is to prepend ".L" to the symbol name, so that the assembler treats it as local. E.g.: .L$lv$__123 = 16 BUG= none R=eholk@chromium.org Review URL: https://codereview.chromium.org/2095633002 .
-
Jim Stichnoth authored
Commit 2e4b960b (https://codereview.chromium.org/2084793002), which made address mode inference more aggressive, exposed a long-standing bug in memory sandboxing, which now manifests in 164.gzip. The problem is in sandboxed code like this: movl %eax, %eax movb 64(%rsp,%rax), %cl If %eax starts out -1, the mov address is something close to %rsp+4GB, instead of %rsp+63. To fix this, we need to use an lea instruction in more cases - specifically when the sandboxed address has an index register and the non-symbolic portion of the offset is nonzero. BUG= none R=jpp@chromium.org Review URL: https://codereview.chromium.org/2097193003 .
-
Sagar Thakur authored
BUG=none R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2096563004 . Patch from Sagar Thakur <sagar.thakur@imgtec.com>.
-
Srdjan Obucina authored
FP register table did not contain correct register information. R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2089043003 . Patch from Srdjan Obucina <Srdjan.Obucina@imgtec.com>.
-
- 22 Jun, 2016 4 commits
-
-
Srdjan Obucina authored
When building pnacl with --host-flavor=debug, tools at ../../out/llvm_x86_64_linux_work/Release+Asserts/bin are not available, so we need a fix to enable source code formatting with tools from ../../out/llvm_x86_64_linux_debug_work/Debug+Asserts/bin R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2081223003 . Patch from Srdjan Obucina <Srdjan.Obucina@imgtec.com>.
-
Srdjan Obucina authored
UnimplementedError is removed from three functions because it causes crashes in almost every test from tests_lit/llvm2ice_tests. emitVariable appears as correct, UnimplementedError may be there by mistake. lowerConstants is unimplemented, but its obvious without UnimeplementedError. lowerJumpTables is unimplemented, but its obvious without UnimeplementedError. We comment these three anyway while changing and testing, so removing them will not affect final results anyway. R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2086423002 . Patch from Srdjan Obucina <Srdjan.Obucina@imgtec.com>.
-
Mohit Bhakkad authored
This patch repeats the same changes for MIPS32, which are done in https://codereview.chromium.org/2080633004 for ARM and X86 archs. R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2086273002 . Patch from Mohit Bhakkad <mohit.bhakkad@imgtec.com>.
-
Mohit Bhakkad authored
Lower call instructions for MIPS32. R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2063653003 . Patch from Mohit Bhakkad <mohit.bhakkad@imgtec.com>.
-
- 21 Jun, 2016 3 commits
-
-
Manasij Mukherjee authored
Index is Index=Var+Const ==> set Index=Var, Offset+=(Const<<Shift) Index is Index=Const+Var ==> set Index=Var, Offset+=(Const<<Shift) Index is Index=Var-Const ==> set Index=Var, Offset-=(Const<<Shift) BUG=none R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2084793002 . -
Thomas Lively authored
BUG=chromium:https://bugs.chromium.org/p/nativeclient/issues/detail?id=4374 R=kschimpf@google.com, stichnot@chromium.org Review URL: https://codereview.chromium.org/2086593002 .
-
Jim Stichnoth authored
A portion of the translation workflow goes like this: dump #1 renumber instructions liveness + live range construction validateLiveness (exit on failure) dump #2 If there are liveness validation errors, instruction numbers are reported with respect to the new instruction numbers, yet the most recent dump output is with respect to the old instruction numbers. Confusion ensues. To fix this, we just do dump #2 before validateLiveness. BUG= none R=jpp@chromium.org Review URL: https://codereview.chromium.org/2080633004 .
-
- 20 Jun, 2016 2 commits
-
-
Jim Stichnoth authored
The code that calculates maximum out-arg stack space was neglecting the fact that on x86-64, the first N scalar floating-point arguments are passed through xmm registers, not the stack. As a result, stack frames were sometimes larger than necessary. BUG= none R=jpp@chromium.org Review URL: https://codereview.chromium.org/2076663006 .
-
Jim Stichnoth authored
Normally, if a call argument is a rematerializable Variable, it is rematerialized into a GPR (via the "lea" instruction) and then written into the appropriate arg space. This is appropriate for arguments passed on the stack, but for register arguments, it forces an unnecessary copy through another register. This CL allows that intermediate register copy to be removed. The resulting code looks cleaner, but it is unlikely to have much effect on performance - there really aren't register pressure issues because lots of scratch registers are available right before the call (which kills all scratch registers). BUG= none R=jpp@chromium.org Review URL: https://codereview.chromium.org/2080443002 .
-
- 17 Jun, 2016 1 commit
-
-
Thomas Lively authored
BUG=https://bugs.chromium.org/p/nativeclient/issues/detail?id=4374 R=kschimpf@google.com, stichnot@chromium.org Review URL: https://codereview.chromium.org/2079723002 .
-
- 16 Jun, 2016 3 commits
-
-
Sagar Thakur authored
BUG=none R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2067183002 . Patch from Sagar Thakur <sagar.thakur@imgtec.com>.
-
Thomas Lively authored
BUG=https://bugs.chromium.org/p/nativeclient/issues/detail?id=4374 R=kschimpf@google.com Review URL: https://codereview.chromium.org/2067403002 .
-
Jim Stichnoth authored
The x86 lowering of bitcast between integers and floats forced the transfer through a stack slot (the original implementer *cough* *cough* wasn't aware of the movd instruction). This requires excess instructions, but also a store to memory followed immediately by a load from that location is very slow. This fixes the problem by using the movd instruction instead. BUG= none R=jpp@chromium.org Review URL: https://codereview.chromium.org/2077503002 .
-
- 15 Jun, 2016 3 commits
-
-
Thomas Lively authored
BUG=https://bugs.chromium.org/p/nativeclient/issues/detail?id=4374 R=kschimpf@google.com Review URL: https://codereview.chromium.org/2068593003 .
-
Jim Stichnoth authored
The Om1 recipe also includes register allocation (minimal mode). BUG= none R=kschimpf@google.com Review URL: https://codereview.chromium.org/2069953004 .
-
Jim Stichnoth authored
Originally, a call instruction was lowered like this: // %result = call @foo(...) %t1:eax = call foo %result = %t1:eax Because t1 is pre-colored, it is not available as a substitution if the following instruction uses %result as a source operand. To improve this, we copy it through an intermediate temporary: // %result = call @foo(...) %t1:eax = call foo %t2 = %t1:eax %result = %t2 BUG= none R=eholk@chromium.org Review URL: https://codereview.chromium.org/2064073005 .
-
- 14 Jun, 2016 2 commits
-
-
Thomas Lively authored
BUG=https://bugs.chromium.org/p/nativeclient/issues/detail?id=4374 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2064613006 .
-
Jim Stichnoth authored
The original code legalized *all* i64 constants into a register move, creating unnecessary instructions and slightly higher register pressure in most cases. Generally, immediates can be used in 64-bit instructions as long as the immediate can be represented as a sign-extended 32-bit value. BUG= none R=jpp@chromium.org Review URL: https://codereview.chromium.org/2063053002 .
-
- 13 Jun, 2016 4 commits
-
-
Thomas Lively authored
BUG=https://bugs.chromium.org/p/nativeclient/issues/detail?id=4374 R=kschimpf@google.com Review URL: https://codereview.chromium.org/2054943002 .
-
Mohit Bhakkad authored
R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2060203002 . Patch from Mohit Bhakkad <mohit.bhakkad@imgtec.com>.
-
Sagar Thakur authored
BUG=none R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2051713002 . Patch from Sagar Thakur <sagar.thakur@imgtec.com>.
-
Mohit Bhakkad authored
This patch provides calling convention class for MIPS with support of integer and floating point types R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2052793003 . Patch from Mohit Bhakkad <mohit.bhakkad@imgtec.com>.
-
- 10 Jun, 2016 1 commit
-
-
Jim Stichnoth authored
X86 only. The register availability peephole optimization during lowering disallows available register substitution when the variable is pre-colored. This is for good reasons (too complex to be discussed here). However, that leaves some potential substitutions on the table. Specifically, this happens a lot around register arguments to function calls, both at the call site and in the prolog. The simplest solution seems to be to launder the pre-colored variable through a separate infinite-weight variable, as implemented in this CL through a combination of such copies and extra legalize() calls. There are other situations where this technique can also work, which may be handled in a separate CL. This CL also fixes a problem where the stack pointer adjustment in the prolog is subject to dead-code elimination if the function has no epilog. This would only happen in asm-verbose mode, in the final liveness analysis pass prior to code emission. BUG= none R=eholk@chromium.org Review URL: https://codereview.chromium.org/2052683003 .
-
- 09 Jun, 2016 1 commit
-
-
Mohit Bhakkad authored
R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2050473005 . Patch from Mohit Bhakkad <mohit.bhakkad@imgtec.com>.
-
- 07 Jun, 2016 1 commit
-
-
Thomas Lively authored
Also added a command line flag for AddressSanitizer BUG=None R=kschimpf@google.com Review URL: https://codereview.chromium.org/2042063002 .
-
- 02 Jun, 2016 1 commit
-
-
Srdjan Obucina authored
Introducing instructions for floating point format conversion. These instructions are needed for full implementation of lowerCast and missing floating point arithmetic instruction frem. BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2024183002 . Patch from Srdjan Obucina <Srdjan.Obucina@imgtec.com>.
-
- 01 Jun, 2016 1 commit
-
-
Sagar Thakur authored
BUG=none R=jpp@chromium.org Review URL: https://codereview.chromium.org/2022063003 . Patch from Sagar Thakur <sagar.thakur@imgtec.com>.
-
- 31 May, 2016 3 commits
-
-
Jim Stichnoth authored
The problem is that because of C++ integral promotion rules, many of the i8 and i16 arithmetic tests were actually being performed as i32 operations. Thus we weren't actually testing everything we meant to test. The fix is to have a python script auto-generate the relevant tests with proper typing. BUG= none R=eholk@chromium.org, jpp@chromium.org, kschimpf@google.com Review URL: https://codereview.chromium.org/2013863002 .
-
Thomas Lively authored
BUG=None R=kschimpf@google.com Review URL: https://codereview.chromium.org/2028733002 .
-
Mohit Bhakkad authored
- InstMIPS32Memory class is added to represent memory related instructions(load/store). I will add remaining load/store instructions if you are okay with this patch. - Changed uncond_br.ll test as it was failing due to hardcoded label no. expected in output. R=jpp@chromium.org, stichnot@chromium.org Review URL: https://codereview.chromium.org/2005823002 . Patch from Mohit Bhakkad <mohit.bhakkad@imgtec.com>.
-
- 30 May, 2016 1 commit
-
-
Sagar Thakur authored
R=stichnot@chromium.org Review URL: https://codereview.chromium.org/2017043002 . Patch from Sagar Thakur <sagar.thakur@imgtec.com>.
-
- 27 May, 2016 1 commit
-
-
Srdjan Obucina authored
This patch introduces floating point registers used for 32-bit operations, and basic handling of FP values in operands. It is partial work needed as a base for further work. R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1993993004 . Patch from Srdjan Obucina <Srdjan.Obucina@imgtec.com>.
-