OSDN Git Service
Kostya Serebryany [Mon, 31 Jul 2017 19:49:45 +0000 (19:49 +0000)]
[sanitizer-coverage] ensure minimal alignment for coverage counters and guards
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309610
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Mon, 31 Jul 2017 19:36:08 +0000 (19:36 +0000)]
[lld/pdb] Add an empty globals stream.
We don't write any actual symbols to this stream yet, but for
now we just create the stream and hook it up to the appropriate
places and give it a valid header.
Differential Revision: https://reviews.llvm.org/D35290
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309608
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Mon, 31 Jul 2017 19:14:19 +0000 (19:14 +0000)]
[SLPVectorizer] Unbreak the build with -Werror.
GCC was complaining about `&&` within `||` without explicit
parentheses. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309606
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 31 Jul 2017 18:52:15 +0000 (18:52 +0000)]
[X86][InstCombine] Add some simplifications for BZHI intrinsics
This intrinsic clears the upper bits starting at a specified index. If the index is a constant we can do some simplifications.
This could be in InstSimplify, but we don't handle any target specific intrinsics there today.
Differential Revision: https://reviews.llvm.org/D36069
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309604
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 31 Jul 2017 18:52:13 +0000 (18:52 +0000)]
[X86][InstCombine] Add basic simplification support for BEXTR/BEXTRI intrinsics.
This patch adds simplification support for the BEXTR/BEXTRI intrinsics to match gcc. This only supports cases that fold to 0 or can be fully constant folded. Theoretically we could support converting to AND if the shift part is unused or to only a shift if the mask doesn't modify any bits after an equivalent shl. gcc doesn't do these transformations either.
I put this in InstCombine, but it could be done in InstSimplify. It would be the first target specific intrinsic in InstSimplify.
Differential Revision: https://reviews.llvm.org/D36063
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309603
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Mon, 31 Jul 2017 18:45:44 +0000 (18:45 +0000)]
[lit] Avoid copying llvm/utils/lit/tests/Inputs with lit site configs
Summary:
This is an alternative solution to running the lit test suite on bots
without polluting the source directory. Each input test suite gets an
auto-generated site config in the build directory that points back to
the test input source directory.
This adds some cmake comlexity, but now we don't need to remove and
re-copy the test input directory before every test.
Reviewers: delcypher, modocache
Subscribers: mgorny, llvm-commits
Differential Revision: https://reviews.llvm.org/D36026
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309602
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Mon, 31 Jul 2017 18:31:04 +0000 (18:31 +0000)]
[llc][NFC] Update message in assert.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309600
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Mon, 31 Jul 2017 18:24:07 +0000 (18:24 +0000)]
[TargetPassConfig] Feature generic options to setup start/stop-after/before
This patch refactors the code used in llc such that all the users of the
addPassesToEmitFile API have access to a homogeneous way of handling
start/stop-after/before options right out of the box.
In particular, just invoking addPassesToEmitFile will set the proper
pipeline without additional effort (modulo parsing a .mir file if the
start-before/after options are used.
NFC.
Differential Revision: https://reviews.llvm.org/D30913
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309599
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 31 Jul 2017 18:08:24 +0000 (18:08 +0000)]
[CGP] use subtract or subtract-of-cmps for result of memcmp expansion
As noted in the code comment, transforming this in the other direction might require
a separate transform here in CGP given the block-at-a-time DAG constraint.
Besides that theoretical motivation, there are 2 practical motivations for the
subtract-of-cmps form:
1. The codegen for both x86 and PPC is better for this IR (though PPC could be better still).
There is discussion about canonicalizing IR to the select form
( http://lists.llvm.org/pipermail/llvm-dev/2017-July/114885.html ),
so we probably need to add DAG transforms for those patterns anyway, but this improves the
memcmp output without waiting for that step.
2. If we allow vector-sized chunks for the load and compare, x86 is better prepared to convert
that to optimal code when using subtract-of-cmps, so another prerequisite patch is avoided
if we choose to enable that.
Differential Revision: https://reviews.llvm.org/D34904
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309597
91177308-0d34-0410-b5e6-
96231b3b80d8
Spyridoula Gravani [Mon, 31 Jul 2017 18:01:16 +0000 (18:01 +0000)]
[DWARF] Added verification check for tags in accelerator tables. This patch verifies that the atom tag is actually the same with the tag of the DIE that we retrieve from the table.
Differential Revision: https://reviews.llvm.org/D35963
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309596
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Mon, 31 Jul 2017 17:47:07 +0000 (17:47 +0000)]
[IPSCCP] Guard a user of getInitializer with hasDefinitiveInitializer
We are not allowed to reason about an initializer value without first
consulting hasDefinitiveInitializer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309594
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 31 Jul 2017 17:35:44 +0000 (17:35 +0000)]
[AVX-512] Remove patterns that select vmovdqu8/16 for unmasked loads. Prefer vmovdqa64/vmovdqu64 instead.
These were taking priority over the aligned load instructions since there is no vmovda8/16. I don't think there is really a difference between aligned and unaligned on newer cpus so I don't think it matters which instructions we use.
But with this change we reduce the size of the isel table a little and we allow the aligned information to pass through to the evex->vec pass and produce the same output has avx/avx2 in some cases.
I also generally dislike patterns rooted in a bitcast which these were.
Differential Revision: https://reviews.llvm.org/D35977
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309589
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 31 Jul 2017 17:09:27 +0000 (17:09 +0000)]
Strip trailing whitespace. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309584
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 31 Jul 2017 17:06:55 +0000 (17:06 +0000)]
Fix typo in comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309583
91177308-0d34-0410-b5e6-
96231b3b80d8
Aditya Nandakumar [Mon, 31 Jul 2017 17:00:16 +0000 (17:00 +0000)]
[GISel]: Support Widening G_ICMP's destination operand.
Updated AArch64 to widen destination to s32.
https://reviews.llvm.org/D35737
Reviewed by Tim
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309579
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Mon, 31 Jul 2017 16:56:25 +0000 (16:56 +0000)]
Do not recombine FMA when that is not needed.
Summary: As per title. This creates useless recombines.
Reviewers: jyknight, nemanjai, mkuper, spatel, RKSimon, zvi, bkramer
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D33848
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309578
91177308-0d34-0410-b5e6-
96231b3b80d8
Florian Hahn [Mon, 31 Jul 2017 16:44:28 +0000 (16:44 +0000)]
Exclude more unused functions from release build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309576
91177308-0d34-0410-b5e6-
96231b3b80d8
Florian Hahn [Mon, 31 Jul 2017 16:29:00 +0000 (16:29 +0000)]
Extend ifndef to printDebugLoc.
GCC7 did not warn about that, but Clang does.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309573
91177308-0d34-0410-b5e6-
96231b3b80d8
Florian Hahn [Mon, 31 Jul 2017 16:11:43 +0000 (16:11 +0000)]
Extend ifdefs to more unused helper functions.
This fixes a buildbot failure with -Werror introduced by r309553
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309572
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 31 Jul 2017 15:32:39 +0000 (15:32 +0000)]
[DebugInfo] Don't overwrite DWARFUnit fields if the CU DIE doesn't have them.
DIEs are lazily deserialized so it's possible that the DWO CU is created
before the DIE is parsed. DWO shares .debug_addr and .debug_ranges with the
object file so overwriting the offset with 0 will make the CU unusable.
No test case because I couldn't get clang to emit a non-zero range base.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309570
91177308-0d34-0410-b5e6-
96231b3b80d8
Don Hinton [Mon, 31 Jul 2017 15:18:57 +0000 (15:18 +0000)]
[docker] Fix unmatched quote problem in here-document on older versions of bash
Summary:
When outputing usage, emit here-document directly instead of
saving in a variable first -- avoids problem with bash 3.2.57 where an
unmatched ' in the here-document results in the following error:
./build_docker_image.sh: line 135: unexpected EOF while looking for matching `''
bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Differential Revision: https://reviews.llvm.org/D36064
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309568
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Bataev [Mon, 31 Jul 2017 14:36:05 +0000 (14:36 +0000)]
[SLP] Initial rework for min/max horizontal reduction vectorization, NFC.
Summary: All getReductionCost() functions are renamed to getArithmeticReductionCost() + added basic infrastructure to handle non-binary reduction operations.
Reviewers: spatel, mzolotukhin, Ayal, mkuper, gilr, hfinkel
Subscribers: RKSimon, llvm-commits
Differential Revision: https://reviews.llvm.org/D29402
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309566
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 31 Jul 2017 14:23:28 +0000 (14:23 +0000)]
[X86] Extending a test cases for LEA factorization.
Submitted on the behalf of Jatin Bhateja
Differential Revision: https://reviews.llvm.org/D36048
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309565
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Bataev [Mon, 31 Jul 2017 14:19:32 +0000 (14:19 +0000)]
[Cost] Rename getReductionCost() to getArithmeticReductionCost(), NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309563
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Dardis [Mon, 31 Jul 2017 14:06:58 +0000 (14:06 +0000)]
[SelectionDAG][mips] Fix PR33883
PR33883 shows that calls to intrinsic functions should not have their vector
arguments or returns subject to ABI changes required by the target.
This resolves PR33883.
Thanks to Alex Crichton for reporting the issue!
Reviewers: zoran.jovanovic, atanasyan
Differential Revision: https://reviews.llvm.org/D35765
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309561
91177308-0d34-0410-b5e6-
96231b3b80d8
Ayal Zaks [Mon, 31 Jul 2017 13:21:42 +0000 (13:21 +0000)]
[LV] Avoid redundant operations manipulating masks
The Loop Vectorizer generates redundant operations when manipulating masks:
AND with true, OR with false, compare equal to true. Instead of relying on
a subsequent pass to clean them up, this patch avoids generating them.
Use null (no-mask) to represent all-one full masks, instead of a constant
all-one vector, following the convention of masked gathers and scatters.
Preparing for a follow-up VPlan patch in which these mask manipulating
operations are modeled using recipes.
Differential Revision: https://reviews.llvm.org/D35725
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309558
91177308-0d34-0410-b5e6-
96231b3b80d8
Martin Storsjo [Mon, 31 Jul 2017 11:18:41 +0000 (11:18 +0000)]
[llvm-dlltool] Write correct weak externals
Previously, the created object files for the import library were broken.
Write the symbol table before the string table. Simplify the code by
using a separate variable Prefix instead of duplicating a few lines.
Also update the coff-weak-exports to actually check that the generated
weak symbols can be found as intended.
Differential Revision: https://reviews.llvm.org/D36065
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309555
91177308-0d34-0410-b5e6-
96231b3b80d8
Florian Hahn [Mon, 31 Jul 2017 10:07:49 +0000 (10:07 +0000)]
Guard print() functions only used by dump() functions.
Summary:
Since r293359, most dump() function are only defined when
`!defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)` holds. print() functions
only used by dump() functions are now unused in release builds,
generating lots of warnings. This patch only defines some print()
functions if they are used.
Reviewers: MatzeB
Reviewed By: MatzeB
Subscribers: arsenm, mzolotukhin, nhaehnle, llvm-commits
Differential Revision: https://reviews.llvm.org/D35949
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309553
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Mon, 31 Jul 2017 10:07:13 +0000 (10:07 +0000)]
[Modules] llvm-config: Exclude CMAKE_CFG_INTDIR. It isn't used in headers.
This is part of https://reviews.llvm.org/D35559
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309552
91177308-0d34-0410-b5e6-
96231b3b80d8
George Rimar [Mon, 31 Jul 2017 09:26:50 +0000 (09:26 +0000)]
[Support/GlobPattern] - Do not crash when pattern has characters with int value < 0.
Found it during work on LLD, it would crash on following
linker script:
SECTIONS { .foo : { *("*®") } }
That happens because ® has int value -82. And chars are used as
array index in code, and are signed by default.
Differential revision: https://reviews.llvm.org/D35891
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309549
91177308-0d34-0410-b5e6-
96231b3b80d8
Florian Hahn [Mon, 31 Jul 2017 09:00:52 +0000 (09:00 +0000)]
[LoopInterchange] Do not interchange loops with function calls.
Summary:
Without any information about the called function, we cannot be sure
that it is safe to interchange loops which contain function calls. For
example there could be dependences that prevent interchanging between
accesses in the called function and the loops. Even functions without any
parameters could cause problems, as they could access memory using
global pointers.
For now, I think it is only safe to interchange loops with calls marked
as readnone.
With this patch, the LLVM test suite passes with `-O3 -mllvm
-enable-loopinterchange` and LoopInterchangeProfitability::isProfitable
returning true for all loops. check-llvm and check-clang also pass when
bootstrapped in a similar fashion, although only 3 loops got
interchanged.
Reviewers: karthikthecool, blitz.opensource, hfinkel, mcrosier, mkuper
Reviewed By: mcrosier
Subscribers: mzolotukhin, llvm-commits
Differential Revision: https://reviews.llvm.org/D35489
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309547
91177308-0d34-0410-b5e6-
96231b3b80d8
Guy Blank [Mon, 31 Jul 2017 08:26:14 +0000 (08:26 +0000)]
[X86][AVX512] Add masked MOVS[S|D] patterns
Added patterns to recognize AND 1 on the mask of a scalar masked
move is not needed since only the lower bit is relevant for the
instruction.
Differential Revision:
https://reviews.llvm.org/D35897
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309546
91177308-0d34-0410-b5e6-
96231b3b80d8
Mohammad Shahid [Mon, 31 Jul 2017 07:40:54 +0000 (07:40 +0000)]
[SLP]: Add test to resurrect the jumbled load patch. This test has multiple uses
of memory loads by different user
Change-Id: I40b5ba8b810265440f3e55efca77c4b41ca98fa4
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309544
91177308-0d34-0410-b5e6-
96231b3b80d8
Hiroshi Inoue [Mon, 31 Jul 2017 06:27:09 +0000 (06:27 +0000)]
[PowerPC] Change method names; NFC
Changed method names based on the discussion in https://reviews.llvm.org/D34986:
getInt64 -> selectI64Imm,
getInt64Count -> selectI64ImmInstrCount.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309541
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 31 Jul 2017 05:55:54 +0000 (05:55 +0000)]
[X86] Add pattern to use bzhi for 64-bit 'and' with a mask when there is a load involved.
We already had a pattern without load, but with a load we were falling back to a regular 'and' due to pattern complexity priority.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309535
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Mon, 31 Jul 2017 00:39:22 +0000 (00:39 +0000)]
gold/CMakeLists.txt: Prune (-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64).
They are handled in HandleLLVMOptions.cmake for -m32.
They are not required for -m64.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309532
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Mon, 31 Jul 2017 00:39:19 +0000 (00:39 +0000)]
Prune trailing linefeed at eof.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309531
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Mon, 31 Jul 2017 00:18:24 +0000 (00:18 +0000)]
DebugInfo: Fix r309526, ensure resetting base address selection entries are used
Missed the resetting base address selections when going from a base
address version to zero base address for non-base-addressed entries.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309529
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Sun, 30 Jul 2017 22:10:00 +0000 (22:10 +0000)]
DebugInfo: Use base address selection entries in debug_ranges to reduce relocations
(from comments in the test)
Group ranges in a range list that apply to the same section and use a base
address selection entry to reduce the number of relocations to one reloc per
section per range list. DWARF5 debug_rnglist will be more efficient than this
in terms of relocations, but it's still better than one reloc per entry in a
range list.
This is an object/executable size tradeoff - shrinking objects, but growing
the linked executable. In one large binary tested, total object size (not just
debug info) shrank by 16%, entirely relocation entries. Linked executable
grew by 4%. This was with compressed debug info in the objects, uncompressed
in the linked executable. Without compression in the objects, the win would be
smaller (the growth of debug_ranges itself would be more significant).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309526
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sun, 30 Jul 2017 21:30:54 +0000 (21:30 +0000)]
test: add an additional cfi_return_column test
Ensure that we still coalesce identical CIEs across FDEs even with
cfi_return_column alterations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309525
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sun, 30 Jul 2017 21:30:53 +0000 (21:30 +0000)]
test: make the test clearer (NFC)
Use `llvm-objdump -dwarf=frames` to dump the .eh_frame to validate the
output textually rather than compare the binary output. This makes it
easier to see what is being checked. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309524
91177308-0d34-0410-b5e6-
96231b3b80d8
Lama Saba [Sun, 30 Jul 2017 20:12:17 +0000 (20:12 +0000)]
NFC: spell correction.
On behalf of jbhateja
Differential Revision: https://reviews.llvm.org/D35885
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309521
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Sun, 30 Jul 2017 18:01:16 +0000 (18:01 +0000)]
Fix typo in comment
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309519
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Sun, 30 Jul 2017 17:26:34 +0000 (17:26 +0000)]
llvm-symbolizer/print_context.c test: Make debug info path independent
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309518
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Sun, 30 Jul 2017 17:16:32 +0000 (17:16 +0000)]
llvm-symbolizer: Make test portable using an explicit object file rather than the host compiler
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309517
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Sun, 30 Jul 2017 16:05:26 +0000 (16:05 +0000)]
Make test robust to changes in prefix/avoid hardcoded line numbers
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309516
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Sun, 30 Jul 2017 15:38:07 +0000 (15:38 +0000)]
Revert "[AVR] Mark a failing symbolizer test as XFAIL"
This reverts commit
83a0e876349adb646ba858eb177b22b0b4bfc59a.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309515
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Sun, 30 Jul 2017 15:15:58 +0000 (15:15 +0000)]
DebugInfo: Fix for CU index usage in 309507
Not sure quite how I failed so clearly to test this, but anyway.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309514
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Sun, 30 Jul 2017 14:55:11 +0000 (14:55 +0000)]
[AVR] Mark a failing symbolizer test as XFAIL
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309512
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Zuckerman [Sun, 30 Jul 2017 11:54:57 +0000 (11:54 +0000)]
Expanding the test case for vf8 for stride 4 interleaved.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309511
91177308-0d34-0410-b5e6-
96231b3b80d8
Coby Tayree [Sun, 30 Jul 2017 11:12:47 +0000 (11:12 +0000)]
[x86][inline-asm][ms-compat] legalize the use of "jc/jz short <op>"
MS ignores the keyword "short" when used after a jc/jz instruction, LLVM ought to do the same.
Test: D35893
Differential Revision: https://reviews.llvm.org/D35892
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309509
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Sun, 30 Jul 2017 08:12:07 +0000 (08:12 +0000)]
DebugInfo: Use DWP cu_index to speed up symbolizing (as intended)
I was a bit lazy when I first implemented this & skipped the index
lookup - obviously for large files this becomes pretty crucial, so here
we go, do the index lookup. Speeds up large DWP symbolizing by... lots.
(20m -> 20s, actually, maybe more in a release build (that was a release
build without index lookup, compared to a debug/non-release build with
the index usage))
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309507
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Sun, 30 Jul 2017 08:12:05 +0000 (08:12 +0000)]
DebugInfo: Group member variable along with the rest
Committed in r309498 I didn't spot where the rest of the private members
were in DWARFContext at the time - group them up again.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309506
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 30 Jul 2017 06:02:59 +0000 (06:02 +0000)]
[X86] Add addsub intrinsics to the intrinsic lowering table so we have a single set of isel patterns.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309502
91177308-0d34-0410-b5e6-
96231b3b80d8
Dehao Chen [Sun, 30 Jul 2017 04:55:39 +0000 (04:55 +0000)]
Refactor the build{Module|Function}SimplificationPipeline to expose optimization phase.
Summary: This is in preparation of https://reviews.llvm.org/D36052
Reviewers: chandlerc, davidxl, tejohnson
Reviewed By: chandlerc
Subscribers: sanjoy, llvm-commits
Differential Revision: https://reviews.llvm.org/D36053
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309500
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Sun, 30 Jul 2017 01:34:08 +0000 (01:34 +0000)]
DebugInfo: Provide option for explicitly specifying the name of the DWP file
If you've archived the DWP file somewhere it's probably useful to be
able to just tell llvm-symbolizer where it is when you're symbolizing
stack traces from the binary.
This only provides a mechanism for specifying a single DWP file, good if
you're symbolizing a program with a single DWP file, but it's likely if
the program is dynamically linked that you might have a DWP for each
dynamic library - in which case this feature won't help (at least as
it's surfaced in llvm-symbolizer for now) - in theory it could be
extended to specify a collection of DWP files that could all be
consulted for split CU hash resolution.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309498
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Elliott [Sun, 30 Jul 2017 00:35:33 +0000 (00:35 +0000)]
Migrate PGOMemOptSizeOpt to use new OptimizationRemarkEmitter Pass
Summary:
Fixes PR33790.
This patch still needs a yaml-style test, which I shall write tomorrow
Reviewers: anemet
Reviewed By: anemet
Subscribers: anemet, llvm-commits
Differential Revision: https://reviews.llvm.org/D35981
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309497
91177308-0d34-0410-b5e6-
96231b3b80d8
Florian Hahn [Sat, 29 Jul 2017 20:35:28 +0000 (20:35 +0000)]
[AArch64] Tie source and destination operands for AESMC/AESIMC.
Summary:
Most CPUs implementing AES fusion require instruction pairs of the form
AESE Vn, _
AESMC Vn, Vn
and
AESD Vn, _
AESIMC Vn, Vn
The constraint is added to AES(I)MC instructions which use the result of
an AES(E|D) instruction by using AES(I)MCTrr pseudo instructions, which
constraint source and destination registers to be the same.
A nice side effect of this change is that now all possible pairs are
scheduled back-to-back on the exynos-m1 for the misched-fusion-aes.ll
test case.
I had to update aes_load_store. The version I added initially was very
reduced and with the new constraint, AESE/AESMC could not be scheduled
back-to-back. I updated the test to be more realistic and still expose
the same scheduling problem as the initial test case.
Reviewers: t.p.northover, rengolin, evandro, kristof.beyls, silviu.baranga
Reviewed By: t.p.northover, evandro
Subscribers: aemerson, javed.absar, llvm-commits
Differential Revision: https://reviews.llvm.org/D35299
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309495
91177308-0d34-0410-b5e6-
96231b3b80d8
Florian Hahn [Sat, 29 Jul 2017 20:04:54 +0000 (20:04 +0000)]
[AArch64] Use 8 bytes as preferred function alignment on Cortex-A53.
Summary:
This change gives a 0.25% speedup on execution time, a 0.82% improvement
in benchmark scores and a 0.20% increase in binary size on a Cortex-A53.
These numbers are the geomean results on a wide range of benchmarks from
the test-suite and a range of proprietary suites.
Reviewers: t.p.northover, aadg, silviu.baranga, mcrosier, rengolin
Reviewed By: rengolin
Subscribers: grimar, davide, aemerson, rengolin, javed.absar, kristof.beyls, llvm-commits
Differential Revision: https://reviews.llvm.org/D35568
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309494
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sat, 29 Jul 2017 20:03:02 +0000 (20:03 +0000)]
MC: simplify internal function call parameter
Rather than passing along most of the parameters, pass a reference to
the MCDWARFrameInfo instead. This makes it easier to pass additional
information about the frame to the checks. We need to keep the extra
constructor for the Key around to allow the construction of the null and
tombstone keys. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309493
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sat, 29 Jul 2017 20:03:00 +0000 (20:03 +0000)]
MC: account for the return column in the CIE key
If the return column is different, we cannot coalesce the CIE across the
FDEs. Add that to the key calculation. This ensures that we emit a
separate CIE.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309492
91177308-0d34-0410-b5e6-
96231b3b80d8
Hiroshi Inoue [Sat, 29 Jul 2017 15:03:31 +0000 (15:03 +0000)]
Fix test failure without X86 backend
move test/Transforms/SimplifyCFG/disable-lookup-table.ll into test/Transforms/SimplifyCFG/X86/disable-lookup-table.ll to avoid test failure when X86 backend is not enabled
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309487
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sat, 29 Jul 2017 14:50:25 +0000 (14:50 +0000)]
[SelectionDAG][X86] CombineBT - more aggressively determine demanded bits
This patch is in 2 parts:
1 - replace combineBT's use of SimplifyDemandedBits (hasOneUse only) with SelectionDAG::GetDemandedBits to more aggressively determine the lower bits used by BT.
2 - update SelectionDAG::GetDemandedBits to support ANY_EXTEND - if the demanded bits are only in the non-extended portion, then peek through and demand from the source value and then ANY_EXTEND that if we found a match.
Differential Revision: https://reviews.llvm.org/D35896
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309486
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Sat, 29 Jul 2017 09:58:43 +0000 (09:58 +0000)]
[tests] Do not emity binary bitcode to stdout in RegionInfo tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309485
91177308-0d34-0410-b5e6-
96231b3b80d8
Michal Gorny [Sat, 29 Jul 2017 08:10:24 +0000 (08:10 +0000)]
[OCaml] Pass -D/-UNDEBUG through to ocamlc
Detect [/-][DU]NDEBUG in CMAKE_C_FLAGS* and pass them through to ocamlc.
This is necessary because their value might affect visibility of dump
functions in LLVM and ocamlc uses its own compiler and flags by default.
Differential Revision: https://reviews.llvm.org/D35898
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309483
91177308-0d34-0410-b5e6-
96231b3b80d8
Dehao Chen [Sat, 29 Jul 2017 07:01:25 +0000 (07:01 +0000)]
Update the test to make windows bot pass.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309482
91177308-0d34-0410-b5e6-
96231b3b80d8
Michal Gorny [Sat, 29 Jul 2017 06:46:45 +0000 (06:46 +0000)]
[OCaml] Install dynamic libraries in 'stubdirs' directory
Install the OCaml dynamic libraries in the 'stubdirs' directory rather
than the llvm subdirectory in order to fix running executables created
by ocamlc. Otherwise, the executables fail to run being unable to locate
the libraries (unless the LLVM directory is explicitly added to
LD_LIBRARY_PATH).
The staging directories are not altered since they work for our
development setup anyway, and installing into two directories would
unnecessarily make the code more complex.
Differential Revision: https://reviews.llvm.org/D35995
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309481
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Sat, 29 Jul 2017 05:32:47 +0000 (05:32 +0000)]
[SCEV] Change an early exit to an assert; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309480
91177308-0d34-0410-b5e6-
96231b3b80d8
Dehao Chen [Sat, 29 Jul 2017 04:11:20 +0000 (04:11 +0000)]
update the test file that was omitted in r309478.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309479
91177308-0d34-0410-b5e6-
96231b3b80d8
Dehao Chen [Sat, 29 Jul 2017 04:10:24 +0000 (04:10 +0000)]
Refine the PGOOpt and SamplePGOSupport handling.
Summary:
Now that SamplePGOSupport is part of PGOOpt, there are several places that need tweaking:
1. AddDiscriminator pass should *not* be invoked at ThinLTOBackend (as it's already invoked in the PreLink phase)
2. addPGOInstrPasses should only be invoked when either ProfileGenFile or ProfileUseFile is non-empty.
3. SampleProfileLoaderPass should only be invoked when SampleProfileFile is non-empty.
4. PGOIndirectCallPromotion should only be invoked in ProfileUse phase, or in ThinLTOBackend of SamplePGO.
Reviewers: chandlerc, tejohnson, davidxl
Reviewed By: chandlerc
Subscribers: sanjoy, mehdi_amini, eraman, llvm-commits
Differential Revision: https://reviews.llvm.org/D36040
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309478
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Sat, 29 Jul 2017 03:56:53 +0000 (03:56 +0000)]
AMDGPU: Remove deadcode from AMDGPUInstPrinter
Reviewers: arsenm
Reviewed By: arsenm
Subscribers: kzhuravl, wdng, nhaehnle, yaxunl, dstuttard, tpr, llvm-commits, t-tye
Differential Revision: https://reviews.llvm.org/D36034
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309477
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Sat, 29 Jul 2017 03:44:07 +0000 (03:44 +0000)]
AMDGPU: Move INDIRECT_BASE_ADDR definition out of common files
Summary: This is only used by R600.
Reviewers: arsenm
Reviewed By: arsenm
Subscribers: kzhuravl, wdng, nhaehnle, yaxunl, dstuttard, tpr, llvm-commits, t-tye
Differential Revision: https://reviews.llvm.org/D35926
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309476
91177308-0d34-0410-b5e6-
96231b3b80d8
Jessica Paquette [Sat, 29 Jul 2017 02:55:46 +0000 (02:55 +0000)]
[MachineOutliner] NFC: Change IsTailCall to a call class + frame class
This commit
- Removes IsTailCall and replaces it with a target-defined unsigned
- Refactors getOutliningCallOverhead and getOutliningFrameOverhead so that they don't use IsTailCall
- Adds a call class + frame class classification to OutlinedFunction and Candidate respectively
This accomplishes a couple things.
Firstly, we don't need the notion of *tail call* in the general outlining algorithm.
Secondly, we now can have different "outlining classes" for each candidate within a set of candidates.
This will make it easy to add new ways to outline sequences for certain targets and dynamically choose
an appropriate cost model for a sequence depending on the context that that sequence lives in.
Ultimately, this should get us closer to being able to do something like, say avoid saving the link
register when outlining AArch64 instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309475
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Sat, 29 Jul 2017 02:52:56 +0000 (02:52 +0000)]
lit::shtest-format.py: Make write-bad-encoding.py py3-aware.
Traceback (most recent call last):
File "llvm/utils/lit/tests/Inputs/shtest-format/external_shell/write-bad-encoding.py", line 5, in <module>
sys.stdout.write(b"a line with bad encoding: \xc2.")
sys.stdout.write doesn't accept bytes but sys.stdout.buffer.write accepts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309473
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sat, 29 Jul 2017 01:26:21 +0000 (01:26 +0000)]
AMDGPU: Make areMemAccessesTriviallyDisjoint more aware of segment flat
Checking the encoding is insufficient since now there can
be global or scratch instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309472
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sat, 29 Jul 2017 01:12:31 +0000 (01:12 +0000)]
AMDGPU: Teach isLegalAddressingMode about global_* instructions
Also refine the flat check to respect flat-for-global feature,
and constant fallback should check global handling, not
specifically MUBUF.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309471
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sat, 29 Jul 2017 01:03:53 +0000 (01:03 +0000)]
AMDGPU: Start selecting global instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309470
91177308-0d34-0410-b5e6-
96231b3b80d8
Eugene Zelenko [Sat, 29 Jul 2017 00:56:56 +0000 (00:56 +0000)]
[Hexagon] Fix some Clang-tidy modernize-use-using and Include What You Use warnings; other minor fixes (NFC).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309469
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexander Shaposhnikov [Sat, 29 Jul 2017 00:30:45 +0000 (00:30 +0000)]
[llvm] Update MachOObjectFile::exports interface
This diff removes the second argument of the method MachOObjectFile::exports.
In all in-tree uses this argument is equal to "this" and
without this argument the interface seems to be cleaner.
Test plan: make check-all
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309462
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Fri, 28 Jul 2017 23:58:24 +0000 (23:58 +0000)]
Fix update_llc_test_checks.py ARM parsing
When I tried running the script, the ARM regex parser could not parse
my code. It failed because the .Lfunc_end line has a comment at the
end of it, so this commit removes the newline at the end of the regex.
Patch by Joel Galenson!
Differential Revision: https://reviews.llvm.org/D35641
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309457
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Edler von Koch [Fri, 28 Jul 2017 23:43:22 +0000 (23:43 +0000)]
[LTO] llvm-lto2: Add option to load sample profile
Summary:
This exposes LTO's Conf.SampleProfile as a command line option
(-lto-sample-profile-file) for testing via the llvm-lto2 utility.
Reviewers: pcc, danielcdh
Subscribers: mehdi_amini, inglorion, llvm-commits
Differential Revision: https://reviews.llvm.org/D36030
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309456
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Jul 2017 23:25:51 +0000 (23:25 +0000)]
Remove the unused offset field from LiveDebugValues (NFC)
Followup to r309426.
rdar://problem/
33580047
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309455
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Jul 2017 23:06:50 +0000 (23:06 +0000)]
Remove the unused offset field from LiveDebugVariables (NFC)
Followup to r309426.
rdar://problem/
33580047
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309451
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Jul 2017 23:00:45 +0000 (23:00 +0000)]
Remove the unused offset from DBG_VALUE (NFC)
Followup to r309426.
rdar://problem/
33580047
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309450
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Jul 2017 22:46:20 +0000 (22:46 +0000)]
Remove the unused DBG_VALUE offset parameter from GlobalISel (NFC)
Followup to r309426.
rdar://problem/
33580047
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309449
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Jul 2017 22:44:44 +0000 (22:44 +0000)]
Update the Go bindings for r309426 (remove offset from llvm.dbg.value)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309448
91177308-0d34-0410-b5e6-
96231b3b80d8
Farhana Aleen [Fri, 28 Jul 2017 22:43:34 +0000 (22:43 +0000)]
Added tests for i8 interleaved-load-pattern of stride=4, VF=(8, 16, 32).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309447
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Jul 2017 22:36:55 +0000 (22:36 +0000)]
Remove the unused DBG_VALUE offset parameter from RegAllocFast (NFC)
Followup to r309426.
rdar://problem/
33580047
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309446
91177308-0d34-0410-b5e6-
96231b3b80d8
Sumanth Gundapaneni [Fri, 28 Jul 2017 22:26:22 +0000 (22:26 +0000)]
Add documentation for the attribute "no-jump-tables"
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309445
91177308-0d34-0410-b5e6-
96231b3b80d8
Sumanth Gundapaneni [Fri, 28 Jul 2017 22:25:40 +0000 (22:25 +0000)]
[SimplifyCFG] Make the no-jump-tables attribute also disable switch lookup tables
Differential Revision: https://reviews.llvm.org/D35579
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309444
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Fri, 28 Jul 2017 22:00:56 +0000 (22:00 +0000)]
[libFuzzer] improve support for inline-8bit-counters (make it more correct and faster)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309443
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 28 Jul 2017 21:52:21 +0000 (21:52 +0000)]
[Hexagon] Formatting changes, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309442
91177308-0d34-0410-b5e6-
96231b3b80d8
Easwaran Raman [Fri, 28 Jul 2017 21:47:36 +0000 (21:47 +0000)]
[Inliner] Do not apply any bonus for cold callsites.
Summary:
Inlining threshold is increased by application of bonuses when the
callee has a single reachable basic block or is rich in vector
instructions. Similarly, inlining cost is reduced by applying a large
bonus when the last call to a static function is considered for
inlining. This patch disables the application of these bonuses when the
callsite or the callee is cold. The intention here is to prevent a large
cold callsite from being inlined to a non-cold caller that could prevent
the caller from being inlined. This is especially important when the
cold callsite is a last call to a static since the associated bonus is
very high.
Reviewers: chandlerc, davidxl
Subscribers: danielcdh, llvm-commits
Differential Revision: https://reviews.llvm.org/D35823
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309441
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Jul 2017 21:27:35 +0000 (21:27 +0000)]
Remove the unused dbg.value offset from SelectionDAG (NFC)
Followup to r309426.
rdar://problem/
33580047
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309436
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 28 Jul 2017 21:13:47 +0000 (21:13 +0000)]
[lit] Use a %{python} substitution to avoid relying on python being on PATH
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309434
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 28 Jul 2017 21:00:57 +0000 (21:00 +0000)]
[lit] Remove stale test inputs before running check-lit
This should fix googletest-format test failures on the clang modules
buildbots, which have a stale copy of the OneTest script in the build
directory.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309432
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Jul 2017 20:44:29 +0000 (20:44 +0000)]
Reword sentence in LangRef
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309431
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Jul 2017 20:21:02 +0000 (20:21 +0000)]
Remove the obsolete offset parameter from @llvm.dbg.value
There is no situation where this rarely-used argument cannot be
substituted with a DIExpression and removing it allows us to simplify
the DWARF backend. Note that this patch does not yet remove any of
the newly dead code.
rdar://problem/
33580047
Differential Revision: https://reviews.llvm.org/D35951
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309426
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Bataev [Fri, 28 Jul 2017 20:11:16 +0000 (20:11 +0000)]
[SLP] Allow vectorization of the instruction from the same basic blocks only, NFC.
Summary:
After some changes in SLP vectorizer we missed some additional checks to
limit the instructions for vectorization. We should not perform analysis
of the instructions if the parent of instruction is not the same as the
parent of the first instruction in the tree or it was analyzed already.
Subscribers: mzolotukhin
Differential Revision: https://reviews.llvm.org/D34881
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309425
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 28 Jul 2017 19:48:40 +0000 (19:48 +0000)]
Fix conditional tail call branch folding when both edges are the same
The conditional tail call logic did the wrong thing when both
destinations of a conditional branch were the same:
BB#1: derived from LLVM BB %entry
Live Ins: %EFLAGS
Predecessors according to CFG: BB#0
JE_1 <BB#5>, %EFLAGS<imp-use,kill>
JMP_1 <BB#5>
BB#5: derived from LLVM BB %sw.epilog
Predecessors according to CFG: BB#1
TCRETURNdi64 <ga:@mergeable_conditional_tailcall>, 0, ...
We would fold the JE_1 to a TCRETURNdi64cc, and then remove our BB#5
successor. Then BB#5 would be deleted as it had no predecessors, leaving
a dangling "JMP_1 <BB#5>" reference behind to cause assertions later.
This patch checks that both conditional branch destinations are
different before doing the transform. The standard branch folding logic
is able to remove both the JMP_1 and the JE_1, and for my test case we
end up forming a better conditional tail call later.
Fixes PR33980
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309422
91177308-0d34-0410-b5e6-
96231b3b80d8