]> granicus.if.org Git - llvm/log
llvm
8 years ago[MC] Fix lexing ordering in assembly label parsing to preserve same line
Nirav Dave [Wed, 13 Jul 2016 14:03:12 +0000 (14:03 +0000)]
[MC] Fix lexing ordering in assembly label parsing to preserve same line
comment placement.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275265 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[X86][SSE] Check for lane crossing shuffles before trying to combine to PSHUFB
Simon Pilgrim [Wed, 13 Jul 2016 12:48:41 +0000 (12:48 +0000)]
[X86][SSE] Check for lane crossing shuffles before trying to combine to PSHUFB

Removes a return-on-fail that was making it tricky to add other variable mask shuffles.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275262 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agofix incorrect xref in sphinx doc
Etienne Bergeron [Wed, 13 Jul 2016 06:10:37 +0000 (06:10 +0000)]
fix incorrect xref in sphinx doc

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275255 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: Fold out no-op kill intrinsics
Matt Arsenault [Wed, 13 Jul 2016 06:04:22 +0000 (06:04 +0000)]
AMDGPU: Fold out no-op kill intrinsics

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275253 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: WQM cleanups
Matt Arsenault [Wed, 13 Jul 2016 05:55:15 +0000 (05:55 +0000)]
AMDGPU: WQM cleanups

- Add new TTI instruction checks
- Don't use const for blocks that are mutated.
- Checking isBranch and isTerminator should be redundant

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275252 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[ConstantFolding] Don't treat negative GEP offsets as positive
David Majnemer [Wed, 13 Jul 2016 05:16:16 +0000 (05:16 +0000)]
[ConstantFolding] Don't treat negative GEP offsets as positive

GEP offsets are signed, don't treat them as huge positive numbers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275251 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[BFI] Add new LazyBFI analysis pass
Adam Nemet [Wed, 13 Jul 2016 05:01:48 +0000 (05:01 +0000)]
[BFI] Add new LazyBFI analysis pass

Summary:
This is necessary for D21771.  In order to add the hotness attribute to
optimization remarks we need BFI to be available in all passes that emit
optimization remarks.

However we don't want to pay for computing BFI unless the hotness
attribute is requested.

This is achieved by making BFI lazy at the very high-level through a new
analysis pass -- BFI is not calculated unless requested.

I am adding a test to check the laziness under D21771 where the first
user of the analysis is added.

Reviewers: hfinkel, dexonsmith, davidxl

Subscribers: davidxl, dexonsmith, llvm-commits

Differential Revision: http://reviews.llvm.org/D22141

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275250 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[ConstantFolding] Cleanups
David Majnemer [Wed, 13 Jul 2016 04:22:12 +0000 (04:22 +0000)]
[ConstantFolding] Cleanups

No functional change is intended, just a minor cleanup.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275249 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agovim: separate the keywords into one per line
Saleem Abdulrasool [Wed, 13 Jul 2016 03:47:58 +0000 (03:47 +0000)]
vim: separate the keywords into one per line

This achieves the same result as previously by using line wrapping.  This allows
us to have one keyword per line which makes adding a new keyword significantly
easier, especially if they are inserted in a lexicographical sort order as you
no longer need to reflow the content around it.

This only does the keywords as that is the group which changes more often.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275248 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[ThinLTO/gold] ThinLTO internalization fixes
Teresa Johnson [Wed, 13 Jul 2016 03:42:41 +0000 (03:42 +0000)]
[ThinLTO/gold] ThinLTO internalization fixes

Internalization was missing cases where we originally had a local symbol
that was promoted eagerly but not actually exported. This is because we
were only internalizing the set of global (non-local) symbols that were
PREVAILAING_DEF_IRONLY. Instead, collect the set of global symbols that
are referenced outside of a single IR file, and skip internalization for
those.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275247 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[IR] Make getIndexedOffsetInType return a signed result
David Majnemer [Wed, 13 Jul 2016 03:42:38 +0000 (03:42 +0000)]
[IR] Make getIndexedOffsetInType return a signed result

A GEPed offset can go negative, the result of getIndexedOffsetInType
should according be a signed type.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275246 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agovim: add local_unnamed_addr keyword
Saleem Abdulrasool [Wed, 13 Jul 2016 03:36:05 +0000 (03:36 +0000)]
vim: add local_unnamed_addr keyword

The `local_unnamed_addr` was introduced in SVN r272709.  Update the syntax
highlighting rules.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275245 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[ConstantFold] Don't incorrectly infer inbounds on array GEP
David Majnemer [Wed, 13 Jul 2016 03:24:41 +0000 (03:24 +0000)]
[ConstantFold] Don't incorrectly infer inbounds on array GEP

The many levels of nesting inside the responsible code made it easy for
bugs to sneak in.  Flattening the logic makes it easier to see what's
going on.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275244 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LoopVectorize] Further cleanups
David Majnemer [Wed, 13 Jul 2016 03:24:38 +0000 (03:24 +0000)]
[LoopVectorize] Further cleanups

No functional change is intended, just a minor cleanup.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275243 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[X86] Remove some seemingly unnecessary patterns that supported vector zext/sext...
Craig Topper [Wed, 13 Jul 2016 02:21:25 +0000 (02:21 +0000)]
[X86] Remove some seemingly unnecessary patterns that supported vector zext/sext with 256-bit source types producing a 256-bit result.

These patterns just extracted the source down to 128-bits to use the instructions. AVX512 seems to have blindly copied them over for VLX, but did not create similar patterns for 512-bit sources. So I'm hoping the backend can't actually produce these cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275240 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoFix ScalarEvolutionExpander step scaling bug
Keno Fischer [Wed, 13 Jul 2016 01:28:12 +0000 (01:28 +0000)]
Fix ScalarEvolutionExpander step scaling bug

The expandAddRecExprLiterally function incorrectly transforms
`[Start + Step * X]` into `Step * [Start + X]` instead of the correct
transform of `[Step * X] + Start`.

This caused https://github.com/JuliaLang/julia/issues/14704#issuecomment-174126219
due to what appeared to be sufficiently complicated loop interactions.

Patch by Jameson Nash (jameson@juliacomputing.com).

Reviewers: sanjoy
Differential Revision: http://reviews.llvm.org/D16505

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275239 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoRemove another unused variable from r275216
Teresa Johnson [Tue, 12 Jul 2016 23:49:17 +0000 (23:49 +0000)]
Remove another unused variable from r275216

Remove another variable added in r275216 that was only used in debug
mode.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275238 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LV] Do not invalidate use-lists we're iterating over.
Michael Kuperstein [Tue, 12 Jul 2016 23:11:34 +0000 (23:11 +0000)]
[LV] Do not invalidate use-lists we're iterating over.

Should make sanitizers happier.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275230 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAdd missing files for r275222
Dehao Chen [Tue, 12 Jul 2016 22:42:24 +0000 (22:42 +0000)]
Add missing files for r275222

New pass manager for LICM.

Summary: Port LICM to the new pass manager.

Reviewers: davidxl, silvas

Subscribers: krasin, vitalybuka, silvas, davide, sanjoy, llvm-commits, mehdi_amini

Differential Revision: http://reviews.llvm.org/D21772

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275224 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoNew pass manager for LICM.
Dehao Chen [Tue, 12 Jul 2016 22:37:48 +0000 (22:37 +0000)]
New pass manager for LICM.

Summary: Port LICM to the new pass manager.

Reviewers: davidxl, silvas

Subscribers: krasin, vitalybuka, silvas, davide, sanjoy, llvm-commits, mehdi_amini

Differential Revision: http://reviews.llvm.org/D21772

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275222 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoGlobalISel: freeze reserved regs after IRTranslator.
Tim Northover [Tue, 12 Jul 2016 22:23:42 +0000 (22:23 +0000)]
GlobalISel: freeze reserved regs after IRTranslator.

We can freeze the registers after the MachineFrameInfo has been configured (by
telling it about calls, inline asm, ...). This doesn't happen at all yet, but
will be part of IR translation.

Fixes -verify-machineinstrs assertion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275221 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: Follow up to r275203
Matt Arsenault [Tue, 12 Jul 2016 21:41:32 +0000 (21:41 +0000)]
AMDGPU: Follow up to r275203

I meant to squash this into it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275220 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoRemove unused variable to fix bot failure from r275216
Teresa Johnson [Tue, 12 Jul 2016 21:29:05 +0000 (21:29 +0000)]
Remove unused variable to fix bot failure from r275216

Remove unused variable added in r275216. Should fix bot failure:
http://lab.llvm.org:8011/builders/lld-x86_64-darwin13/builds/24665

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275219 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoThe test case I added is PowerPC specific but I accidentally
Nemanja Ivanovic [Tue, 12 Jul 2016 21:24:08 +0000 (21:24 +0000)]
The test case I added is PowerPC specific but I accidentally
had it in the wrong directory. Moved it to CodeGen/PowerPC.

Sorry about the noise.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275218 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LV] Remove wrong assumption about LCSSA
Michael Kuperstein [Tue, 12 Jul 2016 21:24:06 +0000 (21:24 +0000)]
[LV] Remove wrong assumption about LCSSA

The LCSSA pass itself will not generate several redundant PHI nodes in a single
exit block. However, such redundant PHI nodes don't violate LCSSA form, and may
be introduced by passes that preserve LCSSA, and/or preserved by the LCSSA pass
itself. So, assuming a single PHI node per exit block is not safe.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275217 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoRefactor indirect call promotion profitability analysis (NFC)
Teresa Johnson [Tue, 12 Jul 2016 21:13:44 +0000 (21:13 +0000)]
Refactor indirect call promotion profitability analysis (NFC)

Summary:
Refactored the profitability analysis out of the IC promotion pass and
into lib/Analysis so that it can be accessed by the summary index
builder in a follow-on patch to enable IC promotion in ThinLTO (D21932).

Reviewers: davidxl, xur

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D22182

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275216 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[Power9] Add codegen for VSX word insert/extract instructions
Nemanja Ivanovic [Tue, 12 Jul 2016 21:00:10 +0000 (21:00 +0000)]
[Power9] Add codegen for VSX word insert/extract instructions

This patch corresponds to review:
http://reviews.llvm.org/D20239

It adds exploitation of XXINSERTW and XXEXTRACTUW instructions that
are useful in some cases for inserting and extracting vector elements of
v4[if]32 vectors.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275215 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoReview fixes to lit documentation
Piotr Padlewski [Tue, 12 Jul 2016 20:59:17 +0000 (20:59 +0000)]
Review fixes to lit documentation

Reviewers: mehdi_amini

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D22245

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275214 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LoopAccessAnalysis] Some minor cleanups
David Majnemer [Tue, 12 Jul 2016 20:31:46 +0000 (20:31 +0000)]
[LoopAccessAnalysis] Some minor cleanups

Use range-base for loops.
Use auto when appropriate.

No functional change is intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275213 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[X86][AVX] Add support for target shuffle combining to VPERM2F128/VPERM2I128
Simon Pilgrim [Tue, 12 Jul 2016 20:27:32 +0000 (20:27 +0000)]
[X86][AVX] Add support for target shuffle combining to VPERM2F128/VPERM2I128

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275212 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[SCCP] Constant fold structs if all the lattice value are constant.
Davide Italiano [Tue, 12 Jul 2016 19:54:19 +0000 (19:54 +0000)]
[SCCP] Constant fold structs if all the lattice value are constant.

Differential Revision:   http://reviews.llvm.org/D22269

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275208 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LoopVectorize] Assorted cleanups
David Majnemer [Tue, 12 Jul 2016 19:35:15 +0000 (19:35 +0000)]
[LoopVectorize] Assorted cleanups

Use range-based for loops instead of doing everything manually.
Use auto when appropriate.

No functional change is intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275205 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoX86FixupBWInsts: No need for forward liveness analysis.
Matthias Braun [Tue, 12 Jul 2016 19:04:30 +0000 (19:04 +0000)]
X86FixupBWInsts: No need for forward liveness analysis.

With r274952 and r275201 in place there are no cases left where a
forward liveness analysis yields different results than a backward one.
So we can remove the forward stepping logic.

Differential Revision: http://reviews.llvm.org/D22083

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275204 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: Fix verifier error with kill intrinsic
Matt Arsenault [Tue, 12 Jul 2016 19:01:23 +0000 (19:01 +0000)]
AMDGPU: Fix verifier error with kill intrinsic

Don't create a terminator in the middle of the block.
We should probably get rid of this intrinsic.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275203 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PM] Port LoopIdiomRecognize Pass to new PM
Dehao Chen [Tue, 12 Jul 2016 18:45:51 +0000 (18:45 +0000)]
[PM] Port LoopIdiomRecognize Pass to new PM

Summary: Port LoopIdiomRecognize Pass to new PM

Reviewers: davidxl

Subscribers: davide, sanjoy, mzolotukhin, llvm-commits

Differential Revision: http://reviews.llvm.org/D22250

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275202 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoBranchFolding: Use LivePhysReg to update live in lists.
Matthias Braun [Tue, 12 Jul 2016 18:44:33 +0000 (18:44 +0000)]
BranchFolding: Use LivePhysReg to update live in lists.

Use LivePhysRegs with a backwards walking algorithm to update live in
lists, this way the results do not depend on the presence of kill flags
anymore.

This patch also reduces the number of registers added as live-in.
Previously all pristine registers as well as all sub registers of a
super register were added resulting in unnecessarily large live in
lists. This fixed https://llvm.org/PR25263.

Differential Revision: http://reviews.llvm.org/D22027

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275201 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: Set isConvergent on v_cmpx* instructions
Matt Arsenault [Tue, 12 Jul 2016 18:41:03 +0000 (18:41 +0000)]
AMDGPU: Set isConvergent on v_cmpx* instructions

No test since these aren't used now, except for one place
in a pre-emit pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275200 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: Add LLVM IR Intrinsic for v_lerp_u8
Wei Ding [Tue, 12 Jul 2016 18:02:14 +0000 (18:02 +0000)]
AMDGPU: Add LLVM IR Intrinsic for v_lerp_u8

Differential Revision: http://reviews.llvm.org/D22239

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275197 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoFix printing of debugging information in LiveIntervals::shrinkToUses
Krzysztof Parzyszek [Tue, 12 Jul 2016 17:55:28 +0000 (17:55 +0000)]
Fix printing of debugging information in LiveIntervals::shrinkToUses

Print VNI->def before calling VNI->markUnused(), since markUnused makes
the def invalid.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275196 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAdd print/dump routines to LiveInterval::SubRange
Krzysztof Parzyszek [Tue, 12 Jul 2016 17:37:44 +0000 (17:37 +0000)]
Add print/dump routines to LiveInterval::SubRange

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275194 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PGO] Don't include full file path in static function profile counter names
Xinliang David Li [Tue, 12 Jul 2016 17:14:51 +0000 (17:14 +0000)]
[PGO] Don't include full file path in static function profile counter names

Patch by Jake VanAdrighem
Differential Revision: http://reviews.llvm.org/D22028

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275193 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoadd tests for missing DeMorgan's Law folds
Sanjay Patel [Tue, 12 Jul 2016 17:05:04 +0000 (17:05 +0000)]
add tests for missing DeMorgan's Law folds

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275192 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoauto-generate checks
Sanjay Patel [Tue, 12 Jul 2016 16:21:55 +0000 (16:21 +0000)]
auto-generate checks

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275188 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoauto-generate checks
Sanjay Patel [Tue, 12 Jul 2016 16:17:30 +0000 (16:17 +0000)]
auto-generate checks

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275187 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoauto-generate checks
Sanjay Patel [Tue, 12 Jul 2016 16:13:04 +0000 (16:13 +0000)]
auto-generate checks

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275186 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[MC] Flip llc's assembly comment preservation flag to have consistent
Nirav Dave [Tue, 12 Jul 2016 15:32:36 +0000 (15:32 +0000)]
[MC] Flip llc's assembly comment preservation flag to have consistent
orientation with llvm-mc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275179 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[AArch64] Set FMOVS0 and FMOVD0 as isAsCheapAsAMove when needed.
Haicheng Wu [Tue, 12 Jul 2016 15:31:41 +0000 (15:31 +0000)]
[AArch64] Set FMOVS0 and FMOVD0 as isAsCheapAsAMove when needed.

If a subtarget has both ZCZeroing and CustomCheapAsMoveHandling features (now
only Kryo has both), set FMOVS0 and FMOVD0 isAsCheapAsAMove.

Differential Revision: http://reviews.llvm.org/D22256

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275178 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PowerPC] Cannonicalize applicable vector shift immediates as swaps
Nemanja Ivanovic [Tue, 12 Jul 2016 12:16:27 +0000 (12:16 +0000)]
[PowerPC] Cannonicalize applicable vector shift immediates as swaps

This patch corresponds to review:
http://reviews.llvm.org/D21358

Vector shifts that have the same semantics as a vector swap are cannonicalized
as such to provide additional opportunities for swap removal optimization to
remove unnecessary swaps.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275168 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[codeview] Improved array type support.
Amjad Aboud [Tue, 12 Jul 2016 12:06:34 +0000 (12:06 +0000)]
[codeview] Improved array type support.

Added support for:
1. Multi dimension array.
2. Array of structure type, which previously was declared incompletely.
3. Dynamic size array.
4. Array where element type is a typedef, volatile or constant (this should resolve PR28311).

Differential Revision: http://reviews.llvm.org/D21526

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275167 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: Unify MOVRELSOffset and MOVRELDOffset
Nicolai Haehnle [Tue, 12 Jul 2016 08:12:16 +0000 (08:12 +0000)]
AMDGPU: Unify MOVRELSOffset and MOVRELDOffset

Summary:
Previously, constant index insertelements would be turned into SI_INDIRECT_DST,
which is bound to prevent some optimization opportunities. Worse, it mislead
the heuristic that decides whether immediates should be lowered to S_MOV_B32
or V_MOV_B32 in a way that resulted in unnecessary v_readfirstlanes.

Reviewers: arsenm, tstellarAMD

Subscribers: arsenm, kzhuravl, llvm-commits

Differential Revision: http://reviews.llvm.org/D22217

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275160 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoRevert "New pass manager for LICM."
Vitaly Buka [Tue, 12 Jul 2016 06:25:32 +0000 (06:25 +0000)]
Revert "New pass manager for LICM."

Summary: This reverts commit r275118.

Subscribers: sanjoy, mehdi_amini

Differential Revision: http://reviews.llvm.org/D22259

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275156 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[AVX512] Remove masked logic op intrinsics and autoupgrade them to native IR.
Craig Topper [Tue, 12 Jul 2016 05:27:53 +0000 (05:27 +0000)]
[AVX512] Remove masked logic op intrinsics and autoupgrade them to native IR.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275155 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoDump enum unique names.
Rui Ueyama [Tue, 12 Jul 2016 03:33:48 +0000 (03:33 +0000)]
Dump enum unique names.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275152 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoRe-enable TPI hash verification for enum records.
Rui Ueyama [Tue, 12 Jul 2016 03:25:03 +0000 (03:25 +0000)]
Re-enable TPI hash verification for enum records.

We didn't read unique names correctly. As a result, we computed
hashes on (non-)unique names instead of unique names.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275150 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoX86: Avoid implicit iterator conversions, NFC
Duncan P. N. Exon Smith [Tue, 12 Jul 2016 03:18:50 +0000 (03:18 +0000)]
X86: Avoid implicit iterator conversions, NFC

Avoid implicit conversions from MachineInstrBundleIterator to
MachineInstr*, mainly by preferring MachineInstr& over MachineInstr* and
using range-based for loops.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275149 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoFix libdeps in r275125. LTO tools require BitReader.
NAKAMURA Takumi [Tue, 12 Jul 2016 03:01:22 +0000 (03:01 +0000)]
Fix libdeps in r275125. LTO tools require BitReader.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275148 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoPrint remarks from WholeProgramDevirt pass for each call site.
Ivan Krasin [Tue, 12 Jul 2016 02:38:37 +0000 (02:38 +0000)]
Print remarks from WholeProgramDevirt pass for each call site.

Summary:
It's useful to have some visibility about which call sites are devirtualized,
especially for debug purposes. Another use case is a regression test on the
application side (like, Chromium).

Reviewers: pcc

Differential Revision: http://reviews.llvm.org/D22252

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275145 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agollvm/test/CodeGen/AMDGPU/selected-stack-object.ll REQUIRES +Asserts, since it expects...
NAKAMURA Takumi [Tue, 12 Jul 2016 02:18:09 +0000 (02:18 +0000)]
llvm/test/CodeGen/AMDGPU/selected-stack-object.ll REQUIRES +Asserts, since it expects assertion failure.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275144 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[Kryo] Enable ZCZeroing feature
Haicheng Wu [Tue, 12 Jul 2016 02:04:01 +0000 (02:04 +0000)]
[Kryo] Enable ZCZeroing feature

This feature uses immediate #0 to zero a register.

Differential Revision: http://reviews.llvm.org/D19985

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275143 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoHexagon: Avoid implicit iterator conversions, NFC
Duncan P. N. Exon Smith [Tue, 12 Jul 2016 01:55:32 +0000 (01:55 +0000)]
Hexagon: Avoid implicit iterator conversions, NFC

Avoid implicit iterator conversions from MachineInstrBundleIterator to
MachineInstr* in the Hexagon backend, mostly by preferring MachineInstr&
over MachineInstr* and switching to range-based for loops.

There's a long tail of API cleanup here, but I'm planning to leave the
rest to the Hexagon maintainers.  HexagonInstrInfo defines many of its
own predicates, and most of them still take MachineInstr*.  Some of
those actually check for nullptr, so I didn't feel comfortable changing
them to MachineInstr& en masse.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275142 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoMips: Avoid implicit iterator conversions, NFC
Duncan P. N. Exon Smith [Tue, 12 Jul 2016 01:47:02 +0000 (01:47 +0000)]
Mips: Avoid implicit iterator conversions, NFC

Avoid implicit conversions from MachineInstrBundleIterator to
MachineInstr* in the Mips backend, mainly by preferring MachineInstr&
over MachineInstr* when a pointer isn't nullable and using range-based
for loops.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275141 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[X86,IR] Remove unnecessary or unused LLVMContext parameter from some of the X86...
Craig Topper [Tue, 12 Jul 2016 01:42:33 +0000 (01:42 +0000)]
[X86,IR] Remove unnecessary or unused LLVMContext parameter from some of the X86 intrinsic upgrade functions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275138 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoSystemZ: Avoid implicit iterator conversions, NFC
Duncan P. N. Exon Smith [Tue, 12 Jul 2016 01:39:01 +0000 (01:39 +0000)]
SystemZ: Avoid implicit iterator conversions, NFC

Avoid implicit conversions from MachineInstrBundleIterator to
MachineInstr* in the SystemZ backend, mainly by preferring MachineInstr&
over MachineInstr* and using range-based for loops.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275137 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoTeach FastISel about thiscall (and, hence, about callee-pop).
Nico Weber [Tue, 12 Jul 2016 01:30:35 +0000 (01:30 +0000)]
Teach FastISel about thiscall (and, hence, about callee-pop).

http://reviews.llvm.org/D22115

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275135 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: Cleanup pseudoinstructions
Matt Arsenault [Tue, 12 Jul 2016 00:23:17 +0000 (00:23 +0000)]
AMDGPU: Cleanup pseudoinstructions

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275133 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: Fix missing scc def on control flow pseudos
Matt Arsenault [Tue, 12 Jul 2016 00:08:14 +0000 (00:08 +0000)]
AMDGPU: Fix missing scc def on control flow pseudos

These are all expanded to instructions that include an scc def.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275132 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: Enable trackLivenessAfterRegAlloc
Matt Arsenault [Mon, 11 Jul 2016 23:56:30 +0000 (23:56 +0000)]
AMDGPU: Enable trackLivenessAfterRegAlloc

This has caught a number of bugs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275131 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoDo not use bool in C header lto.h, use lto_bool_t instead
Mehdi Amini [Mon, 11 Jul 2016 23:55:01 +0000 (23:55 +0000)]
Do not use bool in C header lto.h, use lto_bool_t instead

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275130 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: Remove superfluous string attributes from tests
Matt Arsenault [Mon, 11 Jul 2016 23:35:48 +0000 (23:35 +0000)]
AMDGPU: Remove superfluous string attributes from tests

Also fix v_mac.ll not testing right thing for fneg

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275129 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAttempt to make buildbots happy.
George Burgess IV [Mon, 11 Jul 2016 23:18:32 +0000 (23:18 +0000)]
Attempt to make buildbots happy.

Woohoo, unused variable warnings in builds without asserts (as a result
of r275122).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275126 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAdd a libLTO API to query a memory buffer and check if it contains ObjC categories
Mehdi Amini [Mon, 11 Jul 2016 23:10:18 +0000 (23:10 +0000)]
Add a libLTO API to query a memory buffer and check if it contains ObjC categories

The linker supports a feature to force load an object from a static
archive if it defines an Objective-C category.
This API supports this feature by looking at every section in the
module to find if a category is defined in the module.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275125 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[CFLAA] Simplify CFLGraphBuilder. NFC.
George Burgess IV [Mon, 11 Jul 2016 22:59:09 +0000 (22:59 +0000)]
[CFLAA] Simplify CFLGraphBuilder. NFC.

This patch simplifies the graph builder by encoding nodes as {Value,
Dereference Level} pairs. This lets us kill edge types, and allows us to
get rid of hacks in StratifiedSets (like addAttrsBelow/...). This
simplification also allows us to remove InstantiatedRelations and
InstantiatedAttrs.

Patch by Jia Chen.

Differential Revision: http://reviews.llvm.org/D22080

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275122 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoNew pass manager for LICM.
Dehao Chen [Mon, 11 Jul 2016 22:45:24 +0000 (22:45 +0000)]
New pass manager for LICM.

Summary: Port LICM to the new pass manager.

Reviewers: davidxl, silvas

Subscribers: silvas, davide, sanjoy, llvm-commits, mehdi_amini

Differential Revision: http://reviews.llvm.org/D21772

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275118 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoCorrect ordering of loads/stores.
Alina Sbirlea [Mon, 11 Jul 2016 22:34:29 +0000 (22:34 +0000)]
Correct ordering of loads/stores.

Summary:
Aiming to correct the ordering of loads/stores. This patch changes the
insert point for loads to the position of the first load.
It updates the ordering method for loads to insert before, rather than after.

Before this patch the following sequence:
"load a[1], store a[1], store a[0], load a[2]"
Would incorrectly vectorize to "store a[0,1], load a[1,2]".
The correctness check was assuming the insertion point for loads is at
the position of the first load, when in practice it was at the last
load. An alternative fix would have been to invert the correctness check.
The current fix changes insert position but also requires reordering of
instructions before the vectorized load.

Updated testcases to reflect the changes.

Reviewers: tstellarAMD, llvm-commits, jlebar, arsenm

Subscribers: mzolotukhin

Differential Revision: http://reviews.llvm.org/D22071

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275117 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoARM: validate immediate branch targets in AsmParser.
Tim Northover [Mon, 11 Jul 2016 22:29:37 +0000 (22:29 +0000)]
ARM: validate immediate branch targets in AsmParser.

Immediate branch targets aren't commonly used, but if they are we should make
sure they can actually be encoded. This means they must be divisible by 2 when
targeting Thumb mode, and by 4 when targeting ARM mode.

Also do a little naming cleanup while I was changing everything around anyway.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275116 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: Treat texture gather instructions more like other MIMG instructions
Nicolai Haehnle [Mon, 11 Jul 2016 21:59:43 +0000 (21:59 +0000)]
AMDGPU: Treat texture gather instructions more like other MIMG instructions

Summary:
Setting MIMG to 0 has a bunch of unexpected side effects, including that
isVMEM returns false which leads to incorrect treatment in the hazard
recognizer. The reason I noticed it is that it also leads to incorrect
treatment in VGPR-to-SGPR copies, which is one cause of the referenced bug.

The only reason why MIMG was set to 0 is to signal the special handling of
dmasks, but that can be checked differently.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96877

Reviewers: arsenm, tstellarAMD

Subscribers: arsenm, kzhuravl, llvm-commits

Differential Revision: http://reviews.llvm.org/D22210

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275113 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoRefactor the PDB writing to use a builder approach
Zachary Turner [Mon, 11 Jul 2016 21:45:26 +0000 (21:45 +0000)]
Refactor the PDB writing to use a builder approach

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275110 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[pdb] Add a pdb2yaml option to not dump file headers.
Zachary Turner [Mon, 11 Jul 2016 21:45:09 +0000 (21:45 +0000)]
[pdb] Add a pdb2yaml option to not dump file headers.

This will be useful once we start adding the ability to dump type
records and symbol records, since it will allow us to generate
mergeable information instead of information that specifies an
entire file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275109 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAMDGPU: fix local stack slot allocation bugs
Nicolai Haehnle [Mon, 11 Jul 2016 21:44:40 +0000 (21:44 +0000)]
AMDGPU: fix local stack slot allocation bugs

Summary:
The main bug fix here is using the 32-bit encoding of V_ADD_I32 in
materializeFrameBaseRegister and resolveFrameIndex, so that arbitrary
immediates work.

The second part is that we may now require the SegmentWaveByteOffset
even when there are initially no stack objects and VGPR spilling isn't
enabled, for stack slots that are allocated later. This means that some
bits become effectively dead and can be cleaned up.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96602
Tested-by: Kai Wasserbäch <kai@dev.carbon-project.org>
Reviewers: arsenm, tstellarAMD

Subscribers: arsenm, llvm-commits, kzhuravl

Differential Revision: http://reviews.llvm.org/D21551

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275108 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[X86] Make some cast costs more precise
Michael Kuperstein [Mon, 11 Jul 2016 21:39:44 +0000 (21:39 +0000)]
[X86] Make some cast costs more precise

Make some AVX and AVX512 cast costs more precise.
Based on part of a patch by Elena Demikhovsky (D15604).

Differential Revision: http://reviews.llvm.org/D22064

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275106 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoCodegen: Fix comment in BranchFolding.cpp
Kyle Butt [Mon, 11 Jul 2016 21:37:03 +0000 (21:37 +0000)]
Codegen: Fix comment in BranchFolding.cpp

Blocks to be tail-merged may share more than one successor. Correct the
comment to state that they share a specific successor, SuccBB, rather
than a single successor, which is not true.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275104 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[X86] Fix tailcall return address clobber bug.
Quentin Colombet [Mon, 11 Jul 2016 21:03:03 +0000 (21:03 +0000)]
[X86] Fix tailcall return address clobber bug.

This bug (llvm.org/PR28124) was introduced by r237977, which refactored
the tail call  sequence to be generated in two passes instead of one.

Unfortunately, the stack adjustment produced by the first pass was not
recognized by X86FrameLowering::mergeSPUpdates() in all cases, causing
code such as the following, which clobbers the return address, to be
generated:

popl    %edi
popl    %edi
pushl   %eax
jmp     tailcallee              # TAILCALL

To fix the problem, the entire stack adjustment is performed in
X86ExpandPseudo::ExpandMI() for tail calls.

Patch by Magnus Lång <margnus1@gmail.com>

Differential Revision: http://reviews.llvm.org/D21325

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275103 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agofix documentation comments; NFC
Sanjay Patel [Mon, 11 Jul 2016 20:50:39 +0000 (20:50 +0000)]
fix documentation comments; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275101 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAdd TLI.allowsMisalignedMemoryAccesses to LoadStoreVectorizer
Alina Sbirlea [Mon, 11 Jul 2016 20:46:17 +0000 (20:46 +0000)]
Add TLI.allowsMisalignedMemoryAccesses to LoadStoreVectorizer

Summary: Extend TTI to access TLI.allowsMisalignedMemoryAccesses(). Check condition when vectorizing load and store chains.
Add additional parameters: AddressSpace, Alignment, Fast.

Reviewers: llvm-commits, jlebar

Subscribers: arsenm, mzolotukhin

Differential Revision: http://reviews.llvm.org/D21935

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275100 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[X86] Disable FixupSetCC for CodeGenOpt::None
Michael Kuperstein [Mon, 11 Jul 2016 20:40:44 +0000 (20:40 +0000)]
[X86] Disable FixupSetCC for CodeGenOpt::None

It is an optimization pass, and should not run at -O0. Especially since Fast RA
will not do the required register coalescing anyway, so it's a loss even from
the optimization standpoint.

This also works around (but doesn't quite fix) PR28489.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275099 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[IPRA] Properly compute register usage at call sites.
Chad Rosier [Mon, 11 Jul 2016 18:45:49 +0000 (18:45 +0000)]
[IPRA] Properly compute register usage at call sites.

Differential Revision: http://reviews.llvm.org/D21395
Patch by Vivek Pandya.
PR28144

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275087 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[SystemZ] Recognize Load On Condition Immediate (LOCHI/LOGHI) opportunities
Zhan Jun Liau [Mon, 11 Jul 2016 18:45:03 +0000 (18:45 +0000)]
[SystemZ] Recognize Load On Condition Immediate (LOCHI/LOGHI) opportunities

Summary: Add support for the z13 instructions LOCHI and LOCGHI which
conditionally load immediate values.  Add target instruction info hooks so
that if conversion will allow predication of LHI/LGHI.

Author: RolandF

Reviewers: uweigand

Subscribers: zhanjunl

Commiting on behalf of Roland.

Differential Revision: http://reviews.llvm.org/D22117

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275086 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[SCCP] Try to follow the DRY principle, use `OpSt`.
Davide Italiano [Mon, 11 Jul 2016 18:21:29 +0000 (18:21 +0000)]
[SCCP] Try to follow the DRY principle, use `OpSt`.

Thanks to Eli Friedman for pointing out in his post-commit review!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275084 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[SLSR] Call getPointerSizeInBits with the correct address space.
Jingyue Wu [Mon, 11 Jul 2016 18:13:28 +0000 (18:13 +0000)]
[SLSR] Call getPointerSizeInBits with the correct address space.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275083 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PM/IPO] Port LowerTypeTests to the new PassManager.
Davide Italiano [Mon, 11 Jul 2016 18:10:06 +0000 (18:10 +0000)]
[PM/IPO] Port LowerTypeTests to the new PassManager.

There's a little bit of churn in this patch because the initialization
mechanism is now shared between the old and the new PM. Other than
that, it's just a pretty mechanical translation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275082 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[lanai] Add more tests for assembly of conditional ALU ops
Jacques Pienaar [Mon, 11 Jul 2016 17:58:16 +0000 (17:58 +0000)]
[lanai] Add more tests for assembly of conditional ALU ops

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275081 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoFix the assertion failure caused by http://reviews.llvm.org/D22118
Dehao Chen [Mon, 11 Jul 2016 17:36:02 +0000 (17:36 +0000)]
Fix the assertion failure caused by http://reviews.llvm.org/D22118

Summary: http://reviews.llvm.org/D22118 uses metadata to store the call count, which makes it possible to have branch weight to have only one elements. Also fix the assertion failure in inliner when checking the instruction type to include "invoke" instruction.

Reviewers: mkuper, dnovillo

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D22228

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275079 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[IR] Stop a -Wsign-compare warning from firing
David Majnemer [Mon, 11 Jul 2016 17:09:06 +0000 (17:09 +0000)]
[IR] Stop a -Wsign-compare warning from firing

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275077 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LowerTypeTests] Don't rely on doInitialization().
Davide Italiano [Mon, 11 Jul 2016 17:00:31 +0000 (17:00 +0000)]
[LowerTypeTests] Don't rely on doInitialization().

In preparation for porting this pass to the new PM (which has no
doInitialization()).

Differential Revision:  http://reviews.llvm.org/D22223

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275074 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoImplement callsite-hotness based inline cost for Sample-based PGO
Dehao Chen [Mon, 11 Jul 2016 16:48:54 +0000 (16:48 +0000)]
Implement callsite-hotness based inline cost for Sample-based PGO

Summary:
For sample-based PGO, using BFI to calculate callsite count is sometime not accurate. This is because with sampling based approach, if a callsite resides in a hot loop deeply nested in a bunch of cold branches, the callsite's BFI frequency would be inaccurately calculated due to lack of samples in the cold branch.

E.g.

if (A1 && A2 && A3 && ..... && A10) {
  for (i=0; i < 100000000; i++) {
    callsite();
  }
}

Assume that A1 to A100 are all 100% taken, and callsite has 1000 samples and thus is considerred hot. Because the loop's trip count is huge, it's normal that all branches outside the loop has no sample at all. As a result, we can only use static branch probability to derive the the frequency of the loop header. Assuming that static heuristic thinks each branch is 50% taken, then the count calculated from BFI will be 1/(2^10) of the actual value.

In order to get more accurate callsite count, we directly annotate the weight on the call instruction, and directly use it when checking callsite hotness.

Note that this mechanism can also be shared by instrumentation based callsite hotness analysis. The side benefit is that it breaks the dependency from Inliner to BFI as call count is embedded in the IR.

Reviewers: davidxl, eraman, dnovillo

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D22118

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275073 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoTune the weight propagation algorithm for sample profile.
Dehao Chen [Mon, 11 Jul 2016 16:40:17 +0000 (16:40 +0000)]
Tune the weight propagation algorithm for sample profile.

Summary: Handle the case when there is only one incoming/outgoing edge for a visited basic block: use the block weight to adjust edge weight even when the edge has been visited before. This can help reduce inaccuracies introduced by incorrect basic block profile, as shown in the updated unittest.

Reviewers: davidxl, dnovillo

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D22180

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275072 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[x86] make some of the tests 256-bit for testing diversity
Sanjay Patel [Mon, 11 Jul 2016 15:08:37 +0000 (15:08 +0000)]
[x86] make some of the tests 256-bit for testing diversity

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275070 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAdd missing include from previous commit
Nirav Dave [Mon, 11 Jul 2016 14:32:57 +0000 (14:32 +0000)]
Add missing include from previous commit

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275069 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoFix branch relaxation in 16-bit mode.
Nirav Dave [Mon, 11 Jul 2016 14:23:53 +0000 (14:23 +0000)]
Fix branch relaxation in 16-bit mode.

Thread through MCSubtargetInfo to relaxInstruction function allowing relaxation
to generate jumps with 16-bit sized immediates in 16-bit mode.

This fixes PR22097.

Reviewers: dwmw2, tstellarAMD, craig.topper, jyknight

Subscribers: jfb, arsenm, jyknight, llvm-commits, dsanders

Differential Revision: http://reviews.llvm.org/D20830

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275068 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[x86] specify triple to avoid bot failures
Sanjay Patel [Mon, 11 Jul 2016 14:17:54 +0000 (14:17 +0000)]
[x86] specify triple to avoid bot failures

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275067 91177308-0d34-0410-b5e6-96231b3b80d8