OSDN Git Service
Sanjay Patel [Sat, 21 Jan 2017 17:43:06 +0000 (17:43 +0000)]
[InstCombine] add tests for ashr-ashr; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292724
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Sat, 21 Jan 2017 07:46:03 +0000 (07:46 +0000)]
[Orc][RPC] Add 'removeHandler' and 'clearHandlers' methods to RPC endpoints.
This can be used to free handler resources for handlers that won't be called
again.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292714
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 21 Jan 2017 06:59:38 +0000 (06:59 +0000)]
[X86] Don't allow commuting to form phsub operations.
Fixes PR31714.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292713
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 21 Jan 2017 06:59:35 +0000 (06:59 +0000)]
[X86] Add test cases that show bad commuting being allowed to create a phsub operation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292712
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Sat, 21 Jan 2017 06:01:22 +0000 (06:01 +0000)]
Add missing dependency to "Module Summary Analysis" pass
This is fixing a clang crash when running `clang -flto=thin -save-temps`
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292711
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sat, 21 Jan 2017 04:16:53 +0000 (04:16 +0000)]
[PM] Sink an LCSSA preservation assert from the LoopSimplify pass into
the library routine shared with the new PM and other code.
This assert checks that when LCSSA preservation is requested we start in
LCSSA form. Without this early assert, given *very* complex test cases
we can hit an assert or crash much later on when trying to preserve
LCSSA.
The new PM's loop simplify doesn't need to (and indeed can't) preserve
LCSSA as the new PM doesn't deal in transforms in the dependency graph.
But we asked the library to and shockingly, this didn't work very well!
Stop doing that. Now the assert will tell us immediately with existing
test cases. Before this, it took a pretty convoluted input to trigger
this.
However, sinking the assert also found a bug in LoopUnroll where we
asked simplifyLoop to preserve LCSSA *right before we reform it*. That's
kinda silly and unsurprising that it wasn't available. =D Stop doing
that too.
We also would assert that the unrolled loop was in LCSSA even if
preserving LCSSA was never requested! I don't have a test case or
anything here. I spotted it by inspection and it seems quite obvious. No
logic change anyways, that's just avoiding a spurrious assert.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292710
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sat, 21 Jan 2017 03:48:51 +0000 (03:48 +0000)]
[PM] Teach the loop PM to run LoopSimplify prior to the loop pipeline.
This adds the last remaining core feature of the loop pass pipeline in
the new PM and removes the last of the really egregious hacks in the
LICM tests.
Sadly, this requires really substantial changes in the unittests in
order to provide and maintain simplified loops. This is particularly
hard because for example LoopSimplify will try to fold undef branches to
an ideal direction and simplify the loop accordingly.
Differential Revision: https://reviews.llvm.org/D28766
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292709
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sat, 21 Jan 2017 02:52:29 +0000 (02:52 +0000)]
llvm-strings: remove default for -Wcovered-switch-default
Fix the -Werror build by removing the unnecessary default case in the
covered switch. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292708
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sat, 21 Jan 2017 02:36:28 +0000 (02:36 +0000)]
llvm-strings: add support for `-t`
Allow printing the file content offset via the `-t` or `--radix` option.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292707
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sat, 21 Jan 2017 02:36:26 +0000 (02:36 +0000)]
llvm-cxxfilt: support the `-s` option
This is a stub implementation of the `-s` or `--format` option that
allows the user to specify the demangling style. Since we only support
the Itanium (GNU) style demangling, auto is synonymous with `gnu`.
Simply swallow the option to permit some level of commandline
compatibility.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292706
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Sat, 21 Jan 2017 02:21:04 +0000 (02:21 +0000)]
LiveRegUnits: Add accumulateBackward() function
Re-Commit r292543 with a fix for the situation when the chain end is
MBB.end().
This function can be used to accumulate the set of all read and modified
register in a sequence of instructions.
Use this code in AArch64A57FPLoadBalancing::scavengeRegister() to prove
the concept.
- The AArch64A57LoadBalancing code is using a backwards analysis now
which is irrespective of kill flags. This is the main motivation for
this change.
Differential Revision: http://reviews.llvm.org/D22082
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292705
91177308-0d34-0410-b5e6-
96231b3b80d8
Xin Tong [Sat, 21 Jan 2017 02:11:40 +0000 (02:11 +0000)]
Fix Grammar. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292704
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Sat, 21 Jan 2017 02:03:03 +0000 (02:03 +0000)]
[SLP] Make ReductionOpcode have the right (enum) type. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292703
91177308-0d34-0410-b5e6-
96231b3b80d8
Anmol P. Paralkar [Sat, 21 Jan 2017 02:02:56 +0000 (02:02 +0000)]
MergeFunctions: Preserve debug info in thunks, under option -mergefunc-preserve-debug-info
Summary:
Under option -mergefunc-preserve-debug-info we:
- Do not create a new function for a thunk.
- Retain the debug info for a thunk's parameters (and associated
instructions for the debug info) from the entry block.
Note: -debug will display the algorithm at work.
- Create debug-info for the call (to the shared implementation) made by
a thunk and its return value.
- Erase the rest of the function, retaining the (minimally sized) entry
block to create a thunk.
- Preserve a thunk's call site to point to the thunk even when both occur
within the same translation unit, to aid debugability. Note that this
behaviour differs from the underlying -mergefunc implementation which
modifies the thunk's call site to point to the shared implementation
when both occur within the same translation unit.
Reviewers: echristo, eeckstein, dblaikie, aprantl, friss
Reviewed By: aprantl
Subscribers: davide, fhahn, jfb, mehdi_amini, llvm-commits
Differential Revision: https://reviews.llvm.org/D28075
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292702
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Sat, 21 Jan 2017 02:02:27 +0000 (02:02 +0000)]
[ConstantFold] Remove test checking that we don't constant-fold sqrt(-2).
This depended on libm's errno behavior (we constant fold iff libm's
sqrt(-2) does not set errno) and was breaking on mac.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292701
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Sat, 21 Jan 2017 01:57:44 +0000 (01:57 +0000)]
LowerTypeTests: Fix use-after-free. Found by asan/msan.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292700
91177308-0d34-0410-b5e6-
96231b3b80d8
Eugene Zelenko [Sat, 21 Jan 2017 01:34:25 +0000 (01:34 +0000)]
[AMDGPU] Fix build broken in r292688.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292699
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Sat, 21 Jan 2017 01:33:25 +0000 (01:33 +0000)]
[SLP] Delete useless helper. NFC.
The helper contained a branch for a special case that is unnecessary,
and a cast.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292698
91177308-0d34-0410-b5e6-
96231b3b80d8
Vitaly Buka [Sat, 21 Jan 2017 01:21:56 +0000 (01:21 +0000)]
[libFuzzer] Use CXX to set compiler to use
Reviewers: kcc
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28976
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292697
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Sat, 21 Jan 2017 01:08:22 +0000 (01:08 +0000)]
[libFuzzer] fix gcc build
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292695
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Sat, 21 Jan 2017 01:00:32 +0000 (01:00 +0000)]
[NVPTX] Auto-upgrade some NVPTX intrinsics to LLVM target-generic code.
Summary:
Specifically, we upgrade llvm.nvvm.:
* brev{32,64}
* clz.{i,ll}
* popc.{i,ll}
* abs.{i,ll}
* {min,max}.{i,ll,u,ull}
* h2f
These either map directly to an existing LLVM target-generic
intrinsic or map to a simple LLVM target-generic idiom.
In all cases, we check that the code we generate is lowered to PTX as we
expect.
These builtins don't need to be backfilled in clang: They're not
accessible to user code from nvcc.
Reviewers: tra
Subscribers: majnemer, cfe-commits, llvm-commits, jholewinski
Differential Revision: https://reviews.llvm.org/D28793
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292694
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Sat, 21 Jan 2017 01:00:14 +0000 (01:00 +0000)]
[NVPTX] Move getDivF32Level, usePrecSqrtF32, and useF32FTZ into out of DAGToDAG and into TargetLowering.
Summary:
DADToDAG has access to TargetLowering, but not vice versa, so this is
the more general location for these functions.
NFC
Reviewers: tra
Subscribers: jholewinski, llvm-commits
Differential Revision: https://reviews.llvm.org/D28795
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292693
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Sat, 21 Jan 2017 00:59:57 +0000 (00:59 +0000)]
[ConstantFolding] Constant-fold llvm.sqrt(x) like other intrinsics.
Summary:
Currently we return undef, but we're in the process of changing the
LangRef so that llvm.sqrt behaves like the other math intrinsics,
matching the return value of the standard libcall but not setting errno.
This change is legal even without the LangRef change because currently
calling llvm.sqrt(x) where x is negative is spec'ed to be UB. But in
practice it's also safe because we're simply constant-folding fewer
inputs: Inputs >= -0 get constant-folded as before, but inputs < -0 now
aren't constant-folded, because ConstantFoldFP aborts if the host math
function raises an fp exception.
Reviewers: hfinkel, efriedma, sanjoy
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28929
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292692
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Sat, 21 Jan 2017 00:59:40 +0000 (00:59 +0000)]
[ValueTracking] Clarify comments on CannotBeOrderedLessThanZero and SignBitMustBeZero.
Reviewers: hfinkel, efriedma, sanjoy
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28926
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292691
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Sat, 21 Jan 2017 00:59:23 +0000 (00:59 +0000)]
[NVPTX] Add explicit check for llvm.sqrt.f32 to intrinsics.ll.
Test-only change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292690
91177308-0d34-0410-b5e6-
96231b3b80d8
Eugene Zelenko [Sat, 21 Jan 2017 00:53:49 +0000 (00:53 +0000)]
[AMDGPU] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292688
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Shen [Sat, 21 Jan 2017 00:37:53 +0000 (00:37 +0000)]
[APFloat] Add asserts and descriptions. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292687
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Sat, 21 Jan 2017 00:13:50 +0000 (00:13 +0000)]
[libFuzzer] use print+exit(1) instead of assert to report an error
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292685
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Sat, 21 Jan 2017 00:01:27 +0000 (00:01 +0000)]
[libFuzzer] re-enable LLVMFuzzer-RepeatedMemcmp test, cleanup the test runner nearby
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292683
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 20 Jan 2017 23:39:01 +0000 (23:39 +0000)]
[InstCombine] auto-generate checks; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292682
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Fri, 20 Jan 2017 23:35:29 +0000 (23:35 +0000)]
[libFuzzer] call __sanitizer_dump_coverage via EF
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292681
91177308-0d34-0410-b5e6-
96231b3b80d8
Guozhi Wei [Fri, 20 Jan 2017 23:35:27 +0000 (23:35 +0000)]
[PPC] Give unaligned memory access lower cost on processor that supports it
Newer ppc supports unaligned memory access, it reduces the cost of unaligned memory access significantly. This patch handles this case in PPCTTIImpl::getMemoryOpCost.
This patch fixes pr31492.
Differential Revision: https://reviews.llvm.org/D28630
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292680
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Fri, 20 Jan 2017 23:34:12 +0000 (23:34 +0000)]
[ThinLTO] Don't perform computeDeadSymbols during O0 link, as the result is never used (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292679
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Fri, 20 Jan 2017 23:29:28 +0000 (23:29 +0000)]
[NewGVN] Optimize processing for instructions found trivially dead.
Don't call `isTriviallyDeadInstructions()` once we discover that
an instruction is dead. Instead, set DFS number zero (as suggested
by Danny) and forget about it (this also speeds up things as we
won't try to reprocess that block).
Differential Revision: https://reviews.llvm.org/D28930
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292676
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 20 Jan 2017 23:25:17 +0000 (23:25 +0000)]
GlobalISel: prevent heap use-after-free when looking up VReg.
Translating the constant can create more VRegs, which can invalidate the
reference into the DenseMap. So we have to look up the value again after all
that's happened.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292675
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 20 Jan 2017 23:22:28 +0000 (23:22 +0000)]
LowerTypeTests: Simplify; always create SizeM1 with type IntPtrTy, move initialization out of if statement.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292674
91177308-0d34-0410-b5e6-
96231b3b80d8
Dehao Chen [Fri, 20 Jan 2017 22:56:07 +0000 (22:56 +0000)]
Add indirect call promotion to SamplePGO
Summary: This patch adds metadata for indirect call promotion in the sample profile loader.
Reviewers: xur, davidxl, dnovillo
Reviewed By: davidxl
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28923
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292672
91177308-0d34-0410-b5e6-
96231b3b80d8
Marcos Pividori [Fri, 20 Jan 2017 22:49:13 +0000 (22:49 +0000)]
[libFuzzer] Don't use `#ifdef` for defined macros, instead use `#if`.
Differential Revision: https://reviews.llvm.org/D28972
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292670
91177308-0d34-0410-b5e6-
96231b3b80d8
Marcos Pividori [Fri, 20 Jan 2017 22:49:08 +0000 (22:49 +0000)]
[libFuzzer] Use clang as linker on Windows, to properly include sanitizer libraries.
In order to use sanitizers on Windows, we need to link against many runtime
libraries which will depend on the target being created (executable or dll) and
the c runtime library used (MT/MD).
By default, cmake uses link.exe for linking, which fails because we don't
specify the appropiate dependencies. As we don't want to consider all of that
possible situations which depends on the implementation of the compiler-rt, the
simplest option is to change the rules for linking executables and shared
libraries, using the compiler instead of link.exe.
Clang driver will consider the sanitizer flags, and automatically provide the
required libraries to the linker.
Differential Revision: https://reviews.llvm.org/D27869
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292669
91177308-0d34-0410-b5e6-
96231b3b80d8
Marcos Pividori [Fri, 20 Jan 2017 22:48:47 +0000 (22:48 +0000)]
[libFuzzer] Properly use compiler options supported on Windows.
Replace "-g" by "-gline-tables-only". "-g" is not supported by clang-cl.
Differential Revision: https://reviews.llvm.org/D27868
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292668
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Fri, 20 Jan 2017 22:45:34 +0000 (22:45 +0000)]
[ThinLTO] The "codegen only" path didn't honor the recently added file-based API
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292667
91177308-0d34-0410-b5e6-
96231b3b80d8
Easwaran Raman [Fri, 20 Jan 2017 22:44:04 +0000 (22:44 +0000)]
Improve PGO support for the new inliner
This adds the following to the new PM based inliner in PGO mode:
* Use block frequency analysis to derive callsite's profile count and use
that to adjust thresholds of hot and cold callsites.
* Incrementally update the BFI of the caller after a callee gets inlined
into it. This incremental update is only within an invocation of the run
method - BFI is not preserved across calls to run.
Update the function entry count of the callee after inlining it into a
caller.
* I've tuned the thresholds for the hot and cold callsites using a hacked
up version of the old inliner that explicitly computes BFI on a set of
internal benchmarks and spec. Once the new PM based pipeline stabilizes
(IIRC Chandler mentioned there are known issues) I'll benchmark this
again and adjust the thresholds if required.
Inliner PGO support.
Differential revision: https://reviews.llvm.org/D28331
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292666
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 20 Jan 2017 22:42:09 +0000 (22:42 +0000)]
[pdb] Write the Named Stream mapping to Yaml and binary.
Differential Revision: https://reviews.llvm.org/D28919
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292665
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 20 Jan 2017 22:41:40 +0000 (22:41 +0000)]
[pdb] Merge NamedStreamMapBuilder and NamedStreamMap.
While the builder pattern has proven useful for certain other
larger types, in this case it was hampering the ability to use
the data structure, as for runtime access we need a map that
we can efficiently read from and write to. So the two are merged
into a single data structure that can efficiently be read to,
written from, deserialized from bytes, and serialized to bytes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292664
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 20 Jan 2017 22:41:15 +0000 (22:41 +0000)]
[PDB] Rename some files to be more intuitive.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292663
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 20 Jan 2017 22:18:52 +0000 (22:18 +0000)]
IPO, LTO: Plumb the summary from the LTO API into the pass manager.
Differential Revision: https://reviews.llvm.org/D28840
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292661
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 20 Jan 2017 22:18:47 +0000 (22:18 +0000)]
[ValueTracking] recognize variations of 'clamp' to improve codegen (PR31693)
By enhancing value tracking, we allow an existing min/max canonicalization to
kick in and improve codegen for several targets that have min/max instructions.
Unfortunately, recognizing min/max in value tracking may cause us to hit
a hack in InstCombiner::visitICmpInst() more often:
http://lists.llvm.org/pipermail/llvm-dev/2017-January/109340.html
...but I'm hoping we can remove that soon.
Correctness proofs based on Alive:
Name: smaxmin
Pre: C1 < C2
%cmp2 = icmp slt i8 %x, C2
%min = select i1 %cmp2, i8 %x, i8 C2
%cmp3 = icmp slt i8 %x, C1
%r = select i1 %cmp3, i8 C1, i8 %min
=>
%cmp2 = icmp slt i8 %x, C2
%min = select i1 %cmp2, i8 %x, i8 C2
%cmp1 = icmp sgt i8 %min, C1
%r = select i1 %cmp1, i8 %min, i8 C1
Name: sminmax
Pre: C1 > C2
%cmp2 = icmp sgt i8 %x, C2
%max = select i1 %cmp2, i8 %x, i8 C2
%cmp3 = icmp sgt i8 %x, C1
%r = select i1 %cmp3, i8 C1, i8 %max
=>
%cmp2 = icmp sgt i8 %x, C2
%max = select i1 %cmp2, i8 %x, i8 C2
%cmp1 = icmp slt i8 %max, C1
%r = select i1 %cmp1, i8 %max, i8 C1
----------------------------------------
Optimization: smaxmin
Done: 1
Optimization is correct!
----------------------------------------
Optimization: sminmax
Done: 1
Optimization is correct!
Name: umaxmin
Pre: C1 u< C2
%cmp2 = icmp ult i8 %x, C2
%min = select i1 %cmp2, i8 %x, i8 C2
%cmp3 = icmp ult i8 %x, C1
%r = select i1 %cmp3, i8 C1, i8 %min
=>
%cmp2 = icmp ult i8 %x, C2
%min = select i1 %cmp2, i8 %x, i8 C2
%cmp1 = icmp ugt i8 %min, C1
%r = select i1 %cmp1, i8 %min, i8 C1
Name: uminmax
Pre: C1 u> C2
%cmp2 = icmp ugt i8 %x, C2
%max = select i1 %cmp2, i8 %x, i8 C2
%cmp3 = icmp ugt i8 %x, C1
%r = select i1 %cmp3, i8 C1, i8 %max
=>
%cmp2 = icmp ugt i8 %x, C2
%max = select i1 %cmp2, i8 %x, i8 C2
%cmp1 = icmp ult i8 %max, C1
%r = select i1 %cmp1, i8 %max, i8 C1
----------------------------------------
Optimization: umaxmin
Done: 1
Optimization is correct!
----------------------------------------
Optimization: uminmax
Done: 1
Optimization is correct!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292660
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 20 Jan 2017 21:56:37 +0000 (21:56 +0000)]
docs: Document that !absolute_symbol { all-ones, all-ones } means the full set.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292657
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Fri, 20 Jan 2017 21:54:58 +0000 (21:54 +0000)]
[ThinLTO] Drop non-prevailing non-ODR weak to declarations
Summary:
Allow non-ODR weak/linkonce non-prevailing copies to be marked
as available_externally in the index. Add support for dropping these to
declarations in the backend.
Reviewers: mehdi_amini, pcc
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28806
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292656
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 20 Jan 2017 21:49:41 +0000 (21:49 +0000)]
[InstCombine] add tests to show missed canonicalization of min/max; NFC
Unfortunately, recognizing these in value tracking may cause us to hit
a hack in InstCombiner::visitICmpInst() more often:
http://lists.llvm.org/pipermail/llvm-dev/2017-January/109340.html
...but besides being the obviously Right Thing To Do, there's a clear
codegen win from identifying these patterns for several targets.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292655
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 20 Jan 2017 21:49:34 +0000 (21:49 +0000)]
LowerTypeTests: Implement importing of type identifiers.
To import a type identifier we read the summary and create external
references to the symbols defined when exporting.
Differential Revision: https://reviews.llvm.org/D28546
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292654
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Fri, 20 Jan 2017 21:40:05 +0000 (21:40 +0000)]
[globalisel] Fix an unused variable warning when NDEBUG is defined.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292653
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Fri, 20 Jan 2017 21:34:24 +0000 (21:34 +0000)]
[libFuzzer] add an assert to protect against LLVMFuzzerInitialize changing argv[0]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292652
91177308-0d34-0410-b5e6-
96231b3b80d8
Jan Vesely [Fri, 20 Jan 2017 21:24:26 +0000 (21:24 +0000)]
AMDGPU/R600: Serialize vector trunc stores to private AS
Add DUMMY_CHAIN SDNode to denote stores of interest
Bugzilla: https://llvm.org/bugs/show_bug.cgi?id=28915
Bugzilla: https://llvm.org/bugs/show_bug.cgi?id=30411
Differential Revision: https://reviews.llvm.org/D27964
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292651
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Fri, 20 Jan 2017 21:04:58 +0000 (21:04 +0000)]
NewGVN: Remove pr31686.ll, it is tested by pr31594.ll, which is much smaller and simpler
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292649
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Fri, 20 Jan 2017 21:04:30 +0000 (21:04 +0000)]
NewGVN: Fix PR 31686 and PR 31698 by rewriting store leader handling.
Summary:
This rewrites store expression/leader handling. We no longer use the
value operand as the leader, instead, we store it separately. We also
now store the stored value as part of the expression, and compare it
when comparing stores for equality. This enables us to get rid of a
bunch of our previous hacks and machinations, as the existing
machinery takes care of everything *except* updating the stored value
on classes. The only time we have to update it is if the storecount
goes to 0, and when we do, we destroy it.
Since we no longer use the value operand as the leader, during elimination, we have to use the value operand. Doing this also fixes a bunch of store forwarding cases we were missing.
Any value operand we use is guaranteed to either be updated by previous eliminations, or minimized by future ones.
(IE the fact that we don't use the most dominating value operand when it's not a constant does not affect anything).
Sadly, this change also exposes that we didn't pay attention to the
output of the pr31594.ll test, as it also very clearly exposes the
same store leader bug we are fixing here.
(I added pr31682.ll anyway, but maybe we think that's too large to be useful)
On the plus side, propagate-ir-flags.ll now passes due to the
corrected store forwarding.
This change was 3 stage'd on darwin and linux, with the full test-suite.
Reviewers:
davide
Subscribers:
llvm-commits
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292648
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 20 Jan 2017 20:57:40 +0000 (20:57 +0000)]
LowerTypeTests: Compute SizeM1BitWidth in exportTypeId. NFCI.
This avoids needing to store it in a separate field in TypeIdLowering.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292647
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Fri, 20 Jan 2017 20:57:07 +0000 (20:57 +0000)]
[libFuzzer] experimental support for 'equivalance fuzzing'
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292646
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Fri, 20 Jan 2017 20:50:29 +0000 (20:50 +0000)]
[WebAssembly] Don't create bitcast-wrappers for varargs.
WebAssembly varargs functions use a significantly different ABI than
non-varargs functions, and the current code in
WebAssemblyFixFunctionBitcasts doesn't handle that difference. For now,
just avoid creating wrapper functions in the presence of varargs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292645
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Fri, 20 Jan 2017 20:29:16 +0000 (20:29 +0000)]
[ThinLTO] Fix lazy-loading of MDString instruction attachments
CFI is using intrinsics that takes MDString as arguments, and this
was broken during lazy-loading of metadata.
Differential Revision: https://reviews.llvm.org/D28916
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292641
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 20 Jan 2017 20:14:11 +0000 (20:14 +0000)]
[x86] add tests to show missed min/max vector codegen (PR31693)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292640
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Fri, 20 Jan 2017 19:03:14 +0000 (19:03 +0000)]
[DWARF] [ObjectYAML] Adding APIs for unittesting
Summary: This patch adds some new APIs to enable using the YAML DWARF representation in unit tests. The most basic new API is DWARFYAML::EmitDebugSections which converts a YAML string into a series of owned MemoryBuffer objects stored in a StringMap. The string map can then be used to construct a DWARFContext for parsing in place of an ObjectFile.
Reviewers: dblaikie, clayborg
Subscribers: mgorny, fhahn, jgosnell, aprantl, llvm-commits
Differential Revision: https://reviews.llvm.org/D28828
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292634
91177308-0d34-0410-b5e6-
96231b3b80d8
Haicheng Wu [Fri, 20 Jan 2017 18:51:22 +0000 (18:51 +0000)]
Recommit "[InlineCost] Use TTI to check if GEP is free." #3
This is the third attemp to recommit r292526.
The original summary:
Currently, a GEP is considered free only if its indices are all constant.
TTI::getGEPCost() can give target-specific more accurate analysis. TTI is
already used for the cost of many other instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292633
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Bataev [Fri, 20 Jan 2017 18:40:21 +0000 (18:40 +0000)]
[SLP] Initial test for fix of PR31690.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292631
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 20 Jan 2017 18:30:28 +0000 (18:30 +0000)]
ARM: tLDR_postidx should be marked mayLoad
This fixes -verify-machineinstrs complaints.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292629
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 20 Jan 2017 18:20:30 +0000 (18:20 +0000)]
[InstCombine][X86] Add MULDQ/MULUDQ undef handling
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292627
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Bataev [Fri, 20 Jan 2017 18:04:29 +0000 (18:04 +0000)]
[SLP] A new test for horizontal vectorization for non-power-of-2
instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292626
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 20 Jan 2017 18:04:27 +0000 (18:04 +0000)]
AArch64LoadStoreOptimizer: Update kill flags when merging stores
Kill flags need to be updated correctly when moving stores up/down to
form store pair instructions.
Those invalid flags have been ignored before but as of r290014 they are
recognized when using -mllvm -verify-machineinstrs.
Also simplifies test/CodeGen/AArch64/ldst-opt-dbg-limit.mir, renames it
to ldst-opt.mir test and adds a new tests for this change.
Differential Revision: https://reviews.llvm.org/D28875
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292625
91177308-0d34-0410-b5e6-
96231b3b80d8
Petar Jovanovic [Fri, 20 Jan 2017 17:53:30 +0000 (17:53 +0000)]
[mips] Fix debug information for __thread variable
This patch fixes debug information for __thread variable on Mips
using .dtprelword and .dtpreldword directives.
Patch by Aleksandar Beserminji.
Differential Revision: http://reviews.llvm.org/D28770
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292624
91177308-0d34-0410-b5e6-
96231b3b80d8
Eugene Zelenko [Fri, 20 Jan 2017 17:52:16 +0000 (17:52 +0000)]
[AMDGPU] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292623
91177308-0d34-0410-b5e6-
96231b3b80d8
Wei Mi [Fri, 20 Jan 2017 17:38:54 +0000 (17:38 +0000)]
[RegisterCoalescing] Recommit the patch "Remove partial redundent copy".
The recommit fixes a bug related with live interval update after the partial
redundent copy is moved.
The original patch is to solve the performance problem described in PR27827.
Register coalescing sometimes cannot remove a copy because of interference.
But if we can find a reverse copy in one of the predecessor block of the copy,
the copy is partially redundent and we may remove the copy partially by moving
it to the predecessor block without the reverse copy.
Differential Revision: https://reviews.llvm.org/D28585
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292621
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 20 Jan 2017 17:06:38 +0000 (17:06 +0000)]
[InstCombine][SSE] Tests showing missed opportunities to handle muldq/muludq with undef arguments
Fixed a typo in existing test names at the same time
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292619
91177308-0d34-0410-b5e6-
96231b3b80d8
Haicheng Wu [Fri, 20 Jan 2017 16:52:22 +0000 (16:52 +0000)]
Revert "Recommit "[InlineCost] Use TTI to check if GEP is free." #2"
This reverts commit r292616 because the test case still has problem.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292618
91177308-0d34-0410-b5e6-
96231b3b80d8
Haicheng Wu [Fri, 20 Jan 2017 16:36:34 +0000 (16:36 +0000)]
Recommit "[InlineCost] Use TTI to check if GEP is free." #2
This is the second attemp to recommit r292526.
The original summary:
Currently, a GEP is considered free only if its indices are all constant.
TTI::getGEPCost() can give target-specific more accurate analysis. TTI is
already used for the cost of many other instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292616
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 20 Jan 2017 15:15:59 +0000 (15:15 +0000)]
Remove trailing whitespace. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292613
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 20 Jan 2017 15:14:38 +0000 (15:14 +0000)]
[CostModel][X86] Removed unused cost. NFCI.
SHL v8i32 is already handled in the SSE41 cost table
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292612
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 20 Jan 2017 13:21:30 +0000 (13:21 +0000)]
[InstCombine][SSE] Tests showing missed opportunities to constant fold packss/packus
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292609
91177308-0d34-0410-b5e6-
96231b3b80d8
Sjoerd Meijer [Fri, 20 Jan 2017 13:10:12 +0000 (13:10 +0000)]
[Thumb] Add support for tMUL in the compare instruction peephole optimizer.
We also want to optimise tests like this: return a*b == 0. The MULS
instruction is flag setting, so we don't need the CMP instruction but can
instead branch on the result of the MULS. The generated instructions sequence
for this example was: MULS, MOVS, MOVS, CMP. The MOVS instruction load the
boolean values resulting from the select instruction, but these MOVS
instructions are flag setting and were thus preventing this optimisation. Now
we first reorder and move the MULS to before the CMP and generate sequence
MOVS, MOVS, MULS, CMP so that the optimisation could trigger. Reordering of the
MULS and MOVS is safe to do because the subsequent MOVS instructions just set
the CPSR register and don't use it, i.e. the CPSR is dead.
Differential Revision: https://reviews.llvm.org/D27990
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292608
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 20 Jan 2017 11:28:07 +0000 (11:28 +0000)]
[InstCombine][SSE] Tests showing missed opportunities to handle packss/packus with undef arguments
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292601
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Fri, 20 Jan 2017 10:37:53 +0000 (10:37 +0000)]
Pacify -Wreorder.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292599
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Fri, 20 Jan 2017 10:18:32 +0000 (10:18 +0000)]
Add an assertion to PlaceholderQueue destructor, ensuring it has been flushed
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292597
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Kolton [Fri, 20 Jan 2017 10:01:25 +0000 (10:01 +0000)]
[AMDGPU] Add subtarget features for SDWA/DPP
Reviewers: vpykhtin, artem.tamazov, tstellarAMD
Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, tony-tye
Differential Revision: https://reviews.llvm.org/D28900
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292596
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 20 Jan 2017 09:30:03 +0000 (09:30 +0000)]
[PM] Tidy up the spacing of this new, much nicer test file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292592
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 20 Jan 2017 09:28:21 +0000 (09:28 +0000)]
[InstCombine][SSE] Add DemandedElts support for PACKSS/PACKUS instructions
Simplify a packss/packus truncation based on the elements of the mask that are actually demanded.
Differential Revision: https://reviews.llvm.org/D28777
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292591
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 20 Jan 2017 08:42:19 +0000 (08:42 +0000)]
[PM] Port LoopSink to the new pass manager.
Like several other loop passes (the vectorizer, etc) this pass doesn't
really fit the model of a loop pass. The critical distinction is that it
isn't intended to be pipelined together with other loop passes. I plan
to add some documentation to the loop pass manager to make this more
clear on that side.
LoopSink is also different because it doesn't really need a lot of the
infrastructure of our loop passes. For example, if there aren't loop
invariant instructions causing a preheader to exist, there is no need to
form a preheader. It also doesn't need LCSSA because this pass is
only involved in sinking invariant instructions from a preheader into
the loop, not reasoning about live-outs.
This allows some nice simplifications to the pass in the new PM where we
can directly walk the loops once without restructuring them.
Differential Revision: https://reviews.llvm.org/D28921
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292589
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 20 Jan 2017 08:42:14 +0000 (08:42 +0000)]
[LoopSink] Trivial comment cleanup.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292588
91177308-0d34-0410-b5e6-
96231b3b80d8
Diana Picus [Fri, 20 Jan 2017 08:15:24 +0000 (08:15 +0000)]
[ARM] Use helpers for adding pred / CC operands. NFC
Hunt down some of the places where we use bare addReg(0) or addImm(AL).addReg(0)
and replace with add(condCodeOp()) and add(predOps()). This should make it
easier to understand what those operands represent (without having to look at
the definition of the instruction that we're adding to).
Differential Revision: https://reviews.llvm.org/D27984
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292587
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 20 Jan 2017 07:12:30 +0000 (07:12 +0000)]
[AVX-512] Fix a couple test cases to not pass an undef mask to gather intrinsic. This could break if any future optimizations taken advantage of the undef.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292585
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Fri, 20 Jan 2017 06:48:47 +0000 (06:48 +0000)]
[TargetLowering] Improve comment for setOperationAction().
Add a sentence that says that the type argument can refer to
either the type of a result, or that of an operand.
Review: Eli Friedman.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292584
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Fri, 20 Jan 2017 06:38:41 +0000 (06:38 +0000)]
NewGVN: Fix PR 31682, an overactive assert.
Part of the assert has been left active for further debugging.
The other part has been turned into a stat for tracking for the
moment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292583
91177308-0d34-0410-b5e6-
96231b3b80d8
Mohammad Shahid [Fri, 20 Jan 2017 06:05:33 +0000 (06:05 +0000)]
[SLP] Add a base test for jumbled store
Change-Id: I905ce08a02c76a6896dcfd9629547417c99adc4a
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292581
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Fri, 20 Jan 2017 05:33:22 +0000 (05:33 +0000)]
llvm-cxxfilt: add missing includes from previous change
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292580
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Fri, 20 Jan 2017 05:27:09 +0000 (05:27 +0000)]
llvm-cxxfilt: fix program description
Fix a silly copy-paste error in the tool description. Take the
opportunity to add crash stack printing which will hopefully never be
needed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292579
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Fri, 20 Jan 2017 04:25:26 +0000 (04:25 +0000)]
llvm-cxxfilt: support `-t` to demangle types
By default c++filt demangles functions, though you can optionally pass
`-t` to have it decode types as well, behaving nearly identical to
`__cxa_demangle`. Add support for this mode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292576
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 20 Jan 2017 04:23:08 +0000 (04:23 +0000)]
BitVector: Fix undefined behaviour
Calling reset() on an empty BitVector would call memset with a nullptr
argument which is undefined behaviour.
This should fix the sanitizer bot.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292575
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 20 Jan 2017 03:58:42 +0000 (03:58 +0000)]
Revert "LiveRegUnits: Add accumulateBackward() function"
This seems to be breaking some bots.
This reverts commit r292543.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292574
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Fri, 20 Jan 2017 03:54:04 +0000 (03:54 +0000)]
Revert "Demangle: only demangle mangled symbols"
This reverts SVN r286795. This was incorrect the demangler is expected
to be able to demangle types as well as functions. This makes the
behaviour of itaniumDemangle similar to __cxa_demangle once more.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292573
91177308-0d34-0410-b5e6-
96231b3b80d8
Haicheng Wu [Fri, 20 Jan 2017 03:40:41 +0000 (03:40 +0000)]
Revert "Recommit "[InlineCost] Use TTI to check if GEP is free.""
This reverts commit r292570. The test still has problem.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292572
91177308-0d34-0410-b5e6-
96231b3b80d8
Haicheng Wu [Fri, 20 Jan 2017 03:09:11 +0000 (03:09 +0000)]
Recommit "[InlineCost] Use TTI to check if GEP is free."
This recommits r292526 which is reverted in r292529 after fixing the test case.
The original summary:
Currently, a GEP is considered free only if its indices are all constant.
TTI::getGEPCost() can give target-specific more accurate analysis. TTI is
already used for the cost of many other instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292570
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 20 Jan 2017 02:41:20 +0000 (02:41 +0000)]
[LoopInfo] Add helper methods to compute two useful orderings of the
loops in a function.
These are relatively confusing to talk about and compute correctly so it
seems really good to write down their implementation in one place. I've
replaced one place we needed this in the loop PM infrastructure and
I have another place in a pending patch that wants it.
We can't quite use this for the core loop PM walk because there we're
sometimes working on a sub-forest.
I'll add the expected unittests before committing this but wanted to
make sure folks were happy with these names / comments.
Credit goes to Richard Smith for the idea for naming the order where siblings
are in reverse program order but the tree traversal remains preorder.
Differential Revision: https://reviews.llvm.org/D28932
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292569
91177308-0d34-0410-b5e6-
96231b3b80d8