162417 Commits

Author SHA1 Message Date
Nicolai Haehnle
7bf0a7f962 TableGen: Support Intrinsic values in SearchableTable
Summary:
We will use this in the AMDGPU backend in a subsequent patch
in the stack to lookup target-specific per-intrinsic information.

The generic CodeGenIntrinsic machinery is used to ensure that,
even though we don't calculate actual enum values here, we do
get the intrinsics in the right order for the binary search
index.

Change-Id: If61cd5587963a4c5a1cc53df1e59c5e4dec1f9dc

Reviewers: arsenm, rampitec, b-sumner

Subscribers: wdng, tpr, llvm-commits

Differential Revision: https://reviews.llvm.org/D44935

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328937 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 17:08:58 +00:00
Nicolai Haehnle
ae174bc48d TableGen: More helpful error messages
Summary: Change-Id: I3c23f6f6597912423762780cd8c5315870412bbe

Reviewers: arsenm, rampitec, b-sumner

Subscribers: wdng, llvm-commits

Differential Revision: https://reviews.llvm.org/D44936

Change-Id: Ie62614a3e2d7774f46e4034478b28f57100a2c92

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328936 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 17:08:49 +00:00
Mandeep Singh Grang
962cbb5d4c [DebugInfo] Change std::sort to llvm::sort in response to r327219
Summary:
r327219 added wrappers to std::sort which randomly shuffle the container before sorting.
This will help in uncovering non-determinism caused due to undefined sorting
order of objects having the same key.

To make use of that infrastructure we need to invoke llvm::sort instead of std::sort.

Note: This patch is one of a series of patches to replace *all* std::sort to llvm::sort.
Refer the comments section in D44363 for a list of all the required patches.

Reviewers: echristo, zturner, samsonov

Reviewed By: echristo

Subscribers: JDevlieghere, llvm-commits

Differential Revision: https://reviews.llvm.org/D45134

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328935 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 16:18:49 +00:00
Teresa Johnson
b1a5bd8ba9 [ThinLTO] Add an import cutoff for debugging/triaging
Summary:
Adds -import-cutoff=N which will stop importing during the thin link
after N imports. Default is -1 (no  limit).

Reviewers: wmi

Subscribers: inglorion, llvm-commits

Differential Revision: https://reviews.llvm.org/D45127

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328934 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 15:54:40 +00:00
David Green
a9bfe02006 [LoopRotate] Rotate loops with loop exiting latches
If a loop has a loop exiting latch, it can be profitable
to rotate the loop if it leads to the simplification of
a phi node. Perform rotation in these cases even if loop
rotate itself didnt simplify the loop to get there.

Differential Revision: https://reviews.llvm.org/D44199



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328933 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 12:48:24 +00:00
Craig Topper
879ec9492f [X86] Don't check for folding into a store when deciding if we can promote an i16 mul.
There's no RMW mul operation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328931 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 06:29:32 +00:00
Craig Topper
05eb96d037 [X86] Check if the load and store are to the same pointer before preventing i16 RMW shifts and subtracts from being promoted.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328930 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 06:29:28 +00:00
Craig Topper
ac43954a9b [X86] Add test case to show failure to promote i16 subtract when the LHS is a load and the result is stored to a different address.
We mistakenly believe we might be able to fold this as a RMW operation, but that doesn't end up happening.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328929 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 06:29:27 +00:00
Craig Topper
355d9dd2ee [X86] Allow i16 subtracts to be promoted if the load is on the LHS and its not being stored.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328928 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 06:29:25 +00:00
Craig Topper
c41c603aa8 [X86] Add test case to show failure to promote i16 subtract because we mistakenly believe the load can be folded. NFC
The left hand side of the subtract is a load, but we cna't fold those unless we also have a store.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328927 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 06:29:23 +00:00
Craig Topper
1116feb011 [X86] Remove unneeded temporary variable. NFC
This Promote flag was alwasys set to true except in the default case. But in the default case we don't need to set PVT and can just return false.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328926 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 06:29:21 +00:00
Mandeep Singh Grang
ccca812fc3 [Analysis] Change std::sort to llvm::sort in response to r327219
Summary:
r327219 added wrappers to std::sort which randomly shuffle the container before sorting.
This will help in uncovering non-determinism caused due to undefined sorting
order of objects having the same key.

To make use of that infrastructure we need to invoke llvm::sort instead of std::sort.

Note: This patch is one of a series of patches to replace *all* std::sort to llvm::sort.
Refer D44363 for a list of all the required patches.

Reviewers: sanjoy, dexonsmith, hfinkel, RKSimon

Reviewed By: dexonsmith

Subscribers: david2050, llvm-commits

Differential Revision: https://reviews.llvm.org/D44944

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328925 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 01:46:51 +00:00
Sanjay Patel
319a335961 [DAGCombine] (float)((int) f) --> ftrunc (PR36617)
fptosi / fptoui round towards zero, and that's the same behavior as ISD::FTRUNC, 
so replace a pair of casts with the equivalent node. We don't have to account for 
special cases (NaN, INF) because out-of-range casts are undefined.

Differential Revision: https://reviews.llvm.org/D44909



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328921 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-31 17:55:44 +00:00
Lang Hames
6906b1fc5d [llvm-rtdyld] Fix the InputFileList cl::opt description: it accepts multiple
input files.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328920 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-31 16:01:01 +00:00
Simon Pilgrim
c941c47314 [X86][Btver2] Add MMX_PSHUFB to the JWritePSHUFB InstRW entries
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328918 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-31 09:15:54 +00:00
Simon Pilgrim
ab70130534 Fix trailing whitespace. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328917 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-31 09:14:14 +00:00
Benjamin Kramer
1ab1a1257f Unbreak the build of the go bindings after r328839.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328916 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-31 07:41:25 +00:00
Puyan Lotfi
a96b9330a2 [MIR-Canon] Adding support for local idempotent instruction hoisting.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328915 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-31 05:48:51 +00:00
Craig Topper
c60b3d1b11 [X86] Add SchedRW for PMULLD
Summary:
It seems many CPUs don't implement this instruction as well as the other vector multiplies. Often using a multi uop flow. Silvermont in particular has a 7 uop flow with 11 cycle throughput. Sandy Bridge implements it as a single uop with 5 cycle latency and 1 cycle throughput. But Haswell and later use 2 uops with 10 cycle latency and 2 cycle throughput.

This patch adds a new X86SchedWritePair we can use to tag this instruction separately. I've provided correct information for Silvermont, Btver2, and Sandy Bridge. I've removed the InstRWs for SandyBridge. I've left Haswell/Broadwell/Skylake InstRWs in place because I wasn't sure how to account for the different load latency between 128 and 256 bits. I also left Znver1 InstRWs in place because the existing values don't match Agner's spreadsheet.

I also left a FIXME in the SandyBridge model because it being used for the "generic" model is too optimistic for the 256/512-bit versions since those are multiple uops on all known CPUs.

Reviewers: RKSimon, GGanesh, courbet

Reviewed By: RKSimon

Subscribers: gchatelet, gbedwell, andreadb, llvm-commits

Differential Revision: https://reviews.llvm.org/D44972

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328914 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-31 04:54:32 +00:00
Teresa Johnson
cc2d730bc4 [ThinLTO] Add an option to force summary call edges cold for debugging
Summary:
Useful to selectively disable importing into specific modules for
debugging/triaging/workarounds.

Reviewers: eraman

Subscribers: inglorion, llvm-commits

Differential Revision: https://reviews.llvm.org/D45062

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328909 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-31 00:18:08 +00:00
Fangrui Song
73d8dbf806 Fix a bunch of typoes. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328907 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 22:22:31 +00:00
Ekaterina Romanova
8ee6d98940 Prevent data races in concurrent ThinLTO processes.
Make sure ThinLTO with caching doesn't use non-atomic writes to the cache file (to prevent data races and cache files corruption).

1. Place temp file to the same place where the caching directory is (instead of creating it the directory pointed to by TMP/TEMP variable). This will help to prevent using non-atomic rename and falling back to non-atomic "direct" write to the cache file.
2. if rename failed do not write to the cache file directly (direct write to the file is non-atomic and could cause data race conditions).
3. if cache file doesn't exist (e.g., because 'rename' failed or because some other reasons), bypass using the cache altogether.

Differential Revision:  https://reviews.llvm.org/D45076



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328904 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 21:35:42 +00:00
Jacob Gravelle
95561668f0 [WebAssembly] Register wasm passes with the PassRegistry
Summary:
This exposes WebAssembly passes for use on the command line (as
arguments to -print-before and the like).

Reviewers: dschuff, sunfish

Subscribers: MatzeB, jfb, sbc100, llvm-commits, aheejin

Differential Revision: https://reviews.llvm.org/D45103

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328901 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 20:36:58 +00:00
Krzysztof Parzyszek
f9ed632564 [Hexagon] Fix testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328899 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 19:46:28 +00:00
Krzysztof Parzyszek
f3e8da1532 [Hexagon] Reduce excessive indentation in .s output
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328898 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 19:30:28 +00:00
Krzysztof Parzyszek
5a53d2f60d [Hexagon] Avoid creating invalid offsets in packetizer
Two memory instructions with a dependency only on the address register
between the two (the first one of them being post-incrememnt) can be
packetized together after the offset on the second was updated to the
incremement value. Make sure that the new offset is valid for the
instruction.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328897 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 19:28:37 +00:00
Andrea Di Biagio
f4abfed4f8 [X86][BtVer2] Fixed the number of micro opcodes for AVX vector converts and
VSQRT instructions.

There were still a few AVX instructions with an incorrect number of opcodes.
These should be fixed now.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328892 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 18:53:47 +00:00
Peter Collingbourne
9541cc2882 DataFlowSanitizer: wrappers of functions with local linkage should have the same linkage as the function being wrapped
This patch resolves link errors when the address of a static function is taken, and that function is uninstrumented by DFSan.

This change resolves bug 36314.

Patch by Sam Kerner!

Differential Revision: https://reviews.llvm.org/D44784

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328890 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 18:37:55 +00:00
Puyan Lotfi
eed988e3e7 [MIR] Adding support for Named Virtual Registers in MIR.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328887 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 18:15:54 +00:00
Andrea Di Biagio
292151b43c [X86][BtVer2] Fix the number of uOps for horizontal operations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328886 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 18:15:30 +00:00
Tim Shen
788c75b81c [NVPTX] Enable StructuredCFG for NVPTX
Summary:
Make NVPTX require structured CFG. Added a temporary flag to
"roll back" the behavior for easy deployment.

Combined with D45008, this fixes several internal Nvidia GPU test
failures that we suspect to be ptxas miscompiles (PR27738).

Reviewers: jlebar

Subscribers: jholewinski, sanjoy, llvm-commits, hiraditya

Differential Revision: https://reviews.llvm.org/D45070

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328885 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 17:51:03 +00:00
Tim Shen
e1a4b1753a [BlockPlacement] Disable block placement tail duplciation in structured CFG.
Summary:
Tail duplication easily breaks the structure of CFG, e.g. duplicating on
a region entry. If the structure is intended to be preserved, then we
may want to configure tail duplication, or disable it for structured
CFG. From our benchmark results disabling it doesn't cause performance
regression.

Notice that this currently affects AMDGPU backend. In the next patch, I
also plan to turn on requiresStructuredCFG for NVPTX.

All unit tests still pass.

Reviewers: jlebar, arsenm

Subscribers: jholewinski, sanjoy, wdng, tpr, hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D45008

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328884 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 17:51:00 +00:00
Robert Widmann
fea7778384 [LLVM-C] Finish exception instruction bindings - Round 2
Summary:
Previous revision caused a leak in the echo test that got caught by the ASAN bots because of missing free of the handlers array and was reverted in r328759.  Resubmitting the patch with that correction.

Add support for cleanupret, catchret, catchpad, cleanuppad and catchswitch and their associated accessors.

Test is modified from SimplifyCFG because it contains many diverse usages of these instructions.

Reviewers: whitequark, deadalnix

Reviewed By: whitequark

Subscribers: llvm-commits, vlad.tsyrklevich

Differential Revision: https://reviews.llvm.org/D45100

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328883 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 17:49:53 +00:00
Zachary Turner
b145b4e996 Fix some signed / unsigned conversion problems.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328881 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 17:28:35 +00:00
Zachary Turner
21ff13f9ff [llvm-pdbutil] Dig deeper into the PDB and DBI streams when explaining.
This will show more detail when using `llvm-pdbutil explain` on an
offset in the DBI or PDB streams.  Specifically, it will dig into
individual header fields and substreams to give a more precise
description of what the byte represents.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328878 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 17:16:50 +00:00
Derek Schuff
97f19f4b51 [WebAssembly] Refactor tablegen for store instructions (NFC)
Summary: Add patterns similar to loads.

Differential Revision: https://reviews.llvm.org/D45064

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328876 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 17:02:50 +00:00
Krzysztof Parzyszek
fa05c349cf Revert "peel loops with runtime small trip counts"
This reverts commit r328854, it breaks some Hexagon tests.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328875 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 16:55:44 +00:00
Stanislav Mekhanoshin
936a756969 [AMDGPU] Fixed some instructions latencies
Differential Revision: https://reviews.llvm.org/D45073

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328874 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 16:19:13 +00:00
Sanjay Patel
efe1695d46 [SelectionDAG] Removing FABS folding from DAGCombiner
The code has bugs dealing with -0.0.

Since D44550 introduced FABS pattern folding in InstCombine, 
this patch removes the now-redundant code that causes 
https://bugs.llvm.org/show_bug.cgi?id=36600.

Patch by Mikhail Dvoretckii!

Differential Revision: https://reviews.llvm.org/D44683



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328872 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 15:42:52 +00:00
Krzysztof Parzyszek
208f6d8a9a [Hexagon] Recognize and handle :endloop01
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328870 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 15:29:47 +00:00
Krzysztof Parzyszek
ce765af4ed [Hexagon] Fix printing :mem_noshuf on compiler-generated packets
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328869 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 15:09:05 +00:00
Krzysztof Parzyszek
849eeab899 [Hexagon] Fix flags for store-related intrinsics
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328868 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 14:57:01 +00:00
Andrea Di Biagio
ec8cdb046d [X86][BtVer2] Add missing ReadAfterLd to RM variants of AVX horizontal adds and
most vector logic instructions.

Fixed a few InstRW that forgot to specify a ReadAfterLd for the register input
operand.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328867 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 14:48:08 +00:00
Krzysztof Parzyszek
70a047dc8d [Hexagon] Remove unused scheduling classes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328866 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 14:34:32 +00:00
Andrea Di Biagio
06b4b9b61a [X86][BtVer2] Add tests that show how ReadAfterLd is missing for some
instructions.

In the Btver2 model, there are a few InstRW overrides that don't specify a
ReadAfterLd for the register input operand.

As a result, a few AVX variants of horizontal operations and most vector logic
operations with a folded memory operand don't have a ReadAdvance info associated
to their input register operands.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328865 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 14:29:33 +00:00
Krzysztof Parzyszek
8b950daaeb [Hexagon] Pass pointer to SelectionDAG to dump functions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328864 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 14:29:15 +00:00
Andrea Di Biagio
39bfbf12ad [X86] Add llvm-mca tests for r328834.
Verify that the ReadAfterLd is correctly applied to FMA and 4-ops variable blend
instructions.

As Craig pointed out in D44726, some Intel models still have to be fixed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328861 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 13:38:37 +00:00
Andrea Di Biagio
f3407b73c4 [X86] Add tests to verify the presence of "ReadAfterLd" after r328823.
This change adds a couple of tests to verify the change introduced by revision
328823 ([X86] Correct the placement of ReadAfterLd in BEXTR and BZHI).



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328859 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 11:44:48 +00:00
Vlad Tsyrklevich
4e45b963bc Revert "[LLVM-C] Finish exception instruction bindings"
This reverts commit r328759. It was causing LSan failures on sanitizer-x86_64-linux-bootstrap

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328858 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 06:21:28 +00:00
Michael Bedy
5488d68d0b [AMDGPU] Fix the SDWA Peephole phase to handle src for dst:UNUSED_PRESERVE.
Summary:
The phase attempts to transform operations that extract a portion of a value
into an SDWA src operand in cases where that value is used only once. It
was not prepared for this use to be the preserved portion of a value for
dst:UNUSED_PRESERVE, resulting in a crash or assert.

This change either rejects the illegal SDWA attempt, or in the case where
dst:WORD_1 and the src_sel would be WORD_0, removes the unneeded
extract instruction.

Reviewers: arsenm, #amdgpu

Reviewed By: arsenm, #amdgpu

Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, llvm-commits

Differential Revision: https://reviews.llvm.org/D44364

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328856 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-30 05:03:36 +00:00