| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit adds a weak variant of the cmpxchg operation, as described
in C++11. A cmpxchg instruction with this modifier is permitted to
fail to store, even if the comparison indicated it should.
As a result, cmpxchg instructions must return a flag indicating
success in addition to their original iN value loaded. Thus, for
uniformity *all* cmpxchg instructions now return "{ iN, i1 }". The
second flag is 1 when the store succeeded.
At the DAG level, a new ATOMIC_CMP_SWAP_WITH_SUCCESS node has been
added as the natural representation for the new cmpxchg instructions.
It is a strong cmpxchg.
By default this gets Expanded to the existing ATOMIC_CMP_SWAP during
Legalization, so existing backends should see no change in behaviour.
If they wish to deal with the enhanced node instead, they can call
setOperationAction on it. Beware: as a node with 2 results, it cannot
be selected from TableGen.
Currently, no use is made of the extra information provided in this
patch. Test updates are almost entirely adapting the input IR to the
new scheme.
Summary for out of tree users:
------------------------------
+ Legacy Bitcode files are upgraded during read.
+ Legacy assembly IR files will be invalid.
+ Front-ends must adapt to different type for "cmpxchg".
+ Backends should be unaffected by default.
llvm-svn: 210903
|
|
|
|
|
|
| |
Evergreen is still broken due to missing shl_parts.
llvm-svn: 210885
|
|
|
|
|
|
|
|
|
| |
Delete all unused ones, and add new AMDGPU named intrinsics for
the ones that are. Handle the old AMDIL names for comptability (although
remove their GCCBuiltin names) and add tests since there weren't any
for these before.
llvm-svn: 210827
|
|
|
|
|
|
|
|
|
| |
y)) for vectors"
This reverts commit r210540, adds a testcase for the regression it
caused, and marks the R600 test it was supposed to fix as XFAIL.
llvm-svn: 210792
|
|
|
|
|
|
|
| |
There is not such thing as a 0-data ds instruction, and the data
operand needs to be a vgpr set to something meaningful.
llvm-svn: 210756
|
|
|
|
|
|
|
|
|
|
| |
This is the same problem fixed in r210664 for more types.
The test passes without this fix. For some reason
I'm only hitting this when creating selects lowered
to v2i32 selects.
llvm-svn: 210692
|
|
|
|
| |
llvm-svn: 210680
|
|
|
|
| |
llvm-svn: 210678
|
|
|
|
| |
llvm-svn: 210677
|
|
|
|
| |
llvm-svn: 210676
|
|
|
|
|
|
|
| |
The manual lists them as *_RTN_U32, not *_U32_RTN, which is more
consistent with how every other sized instruction is named.
llvm-svn: 210674
|
|
|
|
|
|
|
| |
Use patterns that will also match the immediate offset to
match the normal read / writes.
llvm-svn: 210673
|
|
|
|
|
|
|
| |
This eliminates extra extract instructions when loading an i8 vector to
a float vector.
llvm-svn: 210666
|
|
|
|
|
|
|
|
|
|
|
| |
There seem to be only 2 places that produce these,
and it's kind of tricky to hit them.
Also fixes failure to bitcast between i64 and v2f32,
although this for some reason wasn't actually broken in the
simple bitcast testcase, but did in the scalar_to_vector one.
llvm-svn: 210664
|
|
|
|
| |
llvm-svn: 210569
|
|
|
|
| |
llvm-svn: 210568
|
|
|
|
| |
llvm-svn: 210567
|
|
|
|
| |
llvm-svn: 210564
|
|
|
|
| |
llvm-svn: 210563
|
|
|
|
|
|
|
|
| |
This consolidates code from the Hexagon, R600, and XCore targets.
No functionality change intended.
llvm-svn: 210539
|
|
|
|
|
|
| |
We can just split targets_to_build in one place and make it immutable.
llvm-svn: 210496
|
|
|
|
| |
llvm-svn: 210476
|
|
|
|
| |
llvm-svn: 210475
|
|
|
|
| |
llvm-svn: 210453
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Alias with unnamed_addr were in a strange state. It is stored in GlobalValue,
the language reference talks about "unnamed_addr aliases" but the verifier
was rejecting them.
It seems natural to allow unnamed_addr in aliases:
* It is a property of how it is accessed, not of the data itself.
* It is perfectly possible to write code that depends on the address
of an alias.
This patch then makes unname_addr legal for aliases. One side effect is that
the syntax changes for a corner case: In globals, unnamed_addr is now printed
before the address space.
llvm-svn: 210302
|
|
|
|
| |
llvm-svn: 210244
|
|
|
|
| |
llvm-svn: 210226
|
|
|
|
| |
llvm-svn: 209971
|
|
|
|
|
|
|
| |
This allows existing DAG combines to work on them, and then
we can re-match to BFE if necessary during instruction selection.
llvm-svn: 209462
|
|
|
|
| |
llvm-svn: 209461
|
|
|
|
| |
llvm-svn: 209460
|
|
|
|
| |
llvm-svn: 209458
|
|
|
|
| |
llvm-svn: 209457
|
|
|
|
| |
llvm-svn: 209456
|
|
|
|
| |
llvm-svn: 209388
|
|
|
|
|
|
|
| |
This should extend the current workaround to work with structs
that only contain legal, scalar types.
llvm-svn: 209331
|
|
|
|
|
|
|
|
| |
Constant initializers involving illegal types hit an assertion.
Patch by: Jan Vesely <jan.vesely@rutgers.edu>
llvm-svn: 209330
|
|
|
|
| |
llvm-svn: 209024
|
|
|
|
| |
llvm-svn: 208886
|
|
|
|
| |
llvm-svn: 208885
|
|
|
|
|
|
| |
inappropriate since it lost its Mask parameter in r154011.
llvm-svn: 208811
|
|
|
|
|
|
| |
This was broken by r208479
llvm-svn: 208740
|
|
|
|
| |
llvm-svn: 208604
|
|
|
|
| |
llvm-svn: 208598
|
|
|
|
| |
llvm-svn: 208480
|
|
|
|
| |
llvm-svn: 208479
|
|
|
|
| |
llvm-svn: 208432
|
|
|
|
|
|
| |
We were dropping the high bits of 64-bit immediate offsets.
llvm-svn: 208431
|
|
|
|
| |
llvm-svn: 208430
|
|
|
|
| |
llvm-svn: 208429
|