Branch: rust-llvm-2016…
-
Merge pull request #68 from luqmana/cherrypick-D27114
alexcrichton committedMar 29, 2017 Preserve nonnull metadata on Loads through SROA & mem2reg.
-
Preserve nonnull metadata on Loads through SROA & mem2reg.
luqmana committedMar 22, 2017 Summary: https://llvm.org/bugs/show_bug.cgi?id=31142 : SROA was dropping the nonnull metadata on loads from allocas that got optimized out. This patch simply preserves nonnull metadata on loads through SROA and mem2reg. Reviewers: chandlerc, efriedma Reviewed By: efriedma Subscribers: hfinkel, spatel, efriedma, arielb1, davide, llvm-commits Differential Revision: https://reviews.llvm.org/D27114 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298540 91177308-0d34-0410-b5e6-96231b3b80d8
-
[Profile] refactor meta data copying/swapping code
Differential Revision: http://reviews.llvm.org/D23619 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279523 91177308-0d34-0410-b5e6-96231b3b80d8
-
Merge pull request #67 from arielb1/cmov-bits
alexcrichton committedMar 23, 2017 Fix computeKnownBits for ARMISD::CMOV
-
Fix computeKnownBits for ARMISD::CMOV
Summary: The true and false operands for the CMOV are operands 0 and 1. ARMISelLowering.cpp::computeKnownBits was looking at operands 1 and 2 instead. This can cause CMOV instructions to be incorrectly folded into BFI if value set by the CMOV is another CMOV, whose known bits are computed incorrectly. This patch fixes the issue and adds a test case. Reviewers: kristof.beyls, jmolloy Subscribers: llvm-commits, aemerson, srhines, rengolin Differential Revision: https://reviews.llvm.org/D31265 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298624 91177308-0d34-0410-b5e6-96231b3b80d8
-
Merge pull request #66 from arielb1/shimmir-pr29151
alexcrichton committedMar 19, 2017 Fix inliner funclet unwind memoization
-
Fix inliner funclet unwind memoization
Summary: The inliner may need to determine where a given funclet unwinds to, and this determination may depend on other funclets throughout the funclet tree. The code that performs this walk in getUnwindDestToken memoizes results to avoid redundant computations. In the case that a funclet's unwind destination is derived from its ancestor, there's code to walk back down the tree from the ancestor updating the memo map of its descendants to record the unwind destination. This change fixes that code to account for the case that some descendant has a different unwind destination, which can happen if that unwind dest is a descendant of the EHPad being queried and thus didn't determine its unwind destination. Also update test inline-funclets.ll, which is supposed to cover such scenarios, to include a case that fails an assertion without this fix but passes with it. Fixes PR29151. Reviewers: majnemer Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D24117 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@280610 91177308-0d34-0410-b5e6-96231b3b80d8
-
Merge pull request #65 from dhduvall/rust-llvm-2016-10-29
alexcrichton committedMar 14, 2017 Archives require a symbol table on Solaris, even if empty.
-
Archives require a symbol table on Solaris, even if empty.
Danek Duvall committedMar 14, 2017 On Solaris ld (and some other tools that use the underlying utility libraries, such as elfdump) chokes on an archive library that has no symbol table. The Solaris tools always create one, even if it's empty. That bug has been fixed in the latest development line, and can probably be backported to a supported release, but it would be nice if LLVM's archiver could emit the empty symbol table, too. Fixed in upstream LLVM in revision 297773.
-
Merge pull request #64 from pftbest/sret
alexcrichton committedMar 3, 2017 [MSP430] Add SRet support to MSP430 target
-
[MSP430] Add SRet support to MSP430 target
pftbest committedMar 2, 2017 This patch adds support for struct return values to the MSP430 target backend. It also reverses the order of argument and return registers in the calling convention to bring it into closer alignment with the published EABI from TI. Patch by Andrew Wygle (awygle). Differential Revision: https://reviews.llvm.org/D29069 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296807 91177308-0d34-0410-b5e6-96231b3b80d8
-
Merge pull request #63 from phil-opp/x86-intrcc-nosse-fix
alexcrichton committedFeb 25, 2017 x86 interrupt calling convention: only save xmm registers if the target supports SSE
-
x86 interrupt calling convention: only save xmm registers if the targ…
…et supports SSE The existing code always saves the xmm registers for 64-bit targets even if the target doesn't support SSE (which is common for kernels). Thus, the compiler inserts movaps instructions which lead to CPU exceptions when an interrupt handler is invoked. This commit fixes this bug by returning a register set without xmm registers from getCalleeSavedRegs and getCallPreservedMask for such targets. Patch by Philipp Oppermann. Differential Revision: https://reviews.llvm.org/D29959 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295347 91177308-0d34-0410-b5e6-96231b3b80d8
-
Merge pull request #62 from binarycrusader/llvm-sparc
alexcrichton committedFeb 22, 2017 use -O3 with some optimizations disabled on sparc w/ gcc
-
use -O3 with some optimizations disabled on sparc w/ gcc
binarycrusader committedFeb 22, 2017 A previous commit changed it so that rust's private copy of llvm was always built with -O0 on sparc, as initially that was the only option that produced a working compiler. After further investigation, it was discovered that applying -fno-delayed-branch and -fno-omit-frame-pointer was sufficient to avoid all of the code generation issues initially encountered while retaining -O3. Investigation with gcc upstream continues.
-
Merge pull request #61 from binarycrusader/rust-llvm-2016-10-29
alexcrichton committedFeb 21, 2017 use -O0 when building release LLVM on sparc
-
use -O0 when building release LLVM on sparc
binarycrusader committedFeb 21, 2017 The bits produced by gcc above -O0 when building rust's private copy of llvm on sparc result in either versions of llvm-tblgen that consistently segfault or produce otherwise unuseable code. This does not affect cross-compiles for some reason. Investigation with gcc upstream is in progress.
-
Merge pull request #60 from japaric/gh38406
alexcrichton committedDec 16, 2016 Add relocations for fixups fixup_arm_thumb_{br,bcc} -
Add relocations for fixups fixup_arm_thumb_{br,bcc}
These need to be mapped through to R_ARM_THM_JUMP{11,8} respectively. Fixes PR30279. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@280651 91177308-0d34-0410-b5e6-96231b3b80d8
-
Merge pull request #59 from pftbest/msp430_backport
alexcrichton committedDec 8, 2016 Backport patches for MSP430 codegen.
-
pftbest committed
Dec 8, 2016 [CodeGen] Fix result type for SMULO/UMULO legalization On some platforms (like MSP430) the second element of the result structure for SMULO/UMULO may have a shorter type than the one returned by SetCC. We need to truncate it to the right type, or else some incorrect code may be generated later on. This fixes issue rust-lang/rust#37829 Patch by Vadzim Dambrouski! Differential Revision: https://reviews.llvm.org/D27154 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288857 91177308-0d34-0410-b5e6-96231b3b80d8
-
pftbest committed
Dec 8, 2016 Fix PR27500: on MSP430 the branch destination offset is measured in words, not bytes. Summary: In addition, the branch instructions will have proper BB destinations, not offsets, like before. Reviewers: asl Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D23718 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286252 91177308-0d34-0410-b5e6-96231b3b80d8 # Conflicts: # lib/Target/MSP430/MSP430BranchSelector.cpp
-
Merge pull request #58 from tromey/rust-main-subprogram
alexcrichton committedDec 1, 2016 Add support for DW_AT_main_subprogram
-
Add support for DW_AT_main_subprogram
tromey committedNov 28, 2016 I'd like the Rust compiler to emit DW_AT_main_subprogram in its DWARF output, so that debuggers can find the user-provided main entry point. See rust-lang/rust#32620 This patch adds support for DW_AT_main_subprogram to LLVM to support this effort. A variant of this patch was accepted by upstream LLVM; there, DebugInfoFlags.def already has a flag with value 1<<20, which is why this patch uses 1<<21 -- this will avoid the need to change the Rust compiler when a new LLVM is imported.
-
Merge pull request #57 from nox/backport-fixup-value
alexcrichton committedNov 27, 2016 Backport rL277331
-
nox committed
Nov 27, 2016
-
Backport r285278 [ARM] Predicate UMAAL selection on hasDSP.
pftbest committedOct 28, 2016 UMAAL is a DSP instruction and it is not available on thumbv7m (Cortex-M3) and thumbv6m (Cortex-M0+1) targets. Also fix wrong CHECK prefix in longMAC.ll test. Patch by Vadzim Dambrouski. Differential Revision: https://reviews.llvm.org/D25890 # Conflicts: # lib/Target/ARM/ARMISelLowering.cpp # test/CodeGen/ARM/longMAC.ll
-
Fuchsia is a new operating system. Change-Id: Id2cd63b5a98c71be555d64e4c4228b0d273610af
-
[InstCombine] Transform !range metadata to !nonnull when combining loads
When combining an integer load with !range metadata that does not include 0 to a pointer load, make sure emit !nonnull metadata on the newly-created pointer load. This prevents the !nonnull metadata from being dropped during a ptrtoint/inttoptr pair. This fixes PR30597. Patch by Ariel Ben-Yehuda! Differential Revision: https://reviews.llvm.org/D25215 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283836 91177308-0d34-0410-b5e6-96231b3b80d8
-
Teach LiveDebugValues about lexical scopes.
This addresses PR26055 LiveDebugValues is very slow. Contrary to the old LiveDebugVariables pass LiveDebugValues currently doesn't look at the lexical scopes before inserting a DBG_VALUE intrinsic. This means that we often propagate DBG_VALUEs much further down than necessary. This is especially noticeable in large C++ functions with many inlined method calls that all use the same "this"-pointer. For example, in the following code it makes no sense to propagate the inlined variable a from the first inlined call to f() into any of the subsequent basic blocks, because the variable will always be out of scope: void sink(int a); void __attribute((always_inline)) f(int a) { sink(a); } void foo(int i) { f(i); if (i) f(i); f(i); } This patch reuses the LexicalScopes infrastructure we have for LiveDebugVariables to take this into account. The effect on compile time and memory consumption is quite noticeable: I tested a benchmark that is a large C++ source with an enormous amount of inlined "this"-pointers that would previously eat >24GiB (most of them for DBG_VALUE intrinsics) and whose compile time was dominated by LiveDebugValues. With this patch applied the memory consumption is 1GiB and 1.7% of the time is spent in LiveDebugValues. https://reviews.llvm.org/D24994 Thanks to Daniel Berlin and Keith Walker for reviewing! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282611 91177308-0d34-0410-b5e6-96231b3b80d8 -
Propagate DBG_VALUE entries when there are unvisited predecessors
Variables are sometimes missing their debug location information in blocks in which the variables should be available. This would occur when one or more predecessor blocks had not yet been visited by the routine which propagated the information from predecessor blocks. This is addressed by only considering predecessor blocks which have already been visited. The solution to this problem was suggested by Daniel Berlin on the LLVM developer mailing list. Differential Revision: https://reviews.llvm.org/D24927 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282506 91177308-0d34-0410-b5e6-96231b3b80d8
-
[SimplifyCFG] Correctly test for unconditional branches in GetCaseRes…
…ults GetCaseResults assumed that a terminator with one successor was an unconditional branch. This is not necessarily the case, it could be a cleanupret. Strengthen the check by querying whether or not the terminator is exceptional. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283517 91177308-0d34-0410-b5e6-96231b3b80d8
-
Import of fastcomp commit 4105790
This is a minimal import of the emscripten "fastcomp" LLVM patchset. All it contains is the target definitions necessary to create a TargetMachine with the correct data layout. With this rustc can emit LLVM IR that emcc will run through the PNaCl lagalizer and the JS backend to generate asm.js.
-
-