Displaying 20 results from an estimated 8000 matches similar to: "One element vectors versus scalars"
2020 Jan 11
2
[RFC][SDAG] Convert build_vector of ops on extractelts into ops on input vectors
Absolutely. We do it for scalars, so it would likely be a matter of just
extending it.
But that is one example. The issue of extracting elements, performing an
operation on each element individually and then rebuilding the vector is
likely more prevalent than that. At least I think that is the case, but
I'll do some analysis to see if it is so or not.
On Sat, Jan 11, 2020 at 6:15 PM Craig
2020 Jan 11
2
[RFC][SDAG] Convert build_vector of ops on extractelts into ops on input vectors
Thanks so much for your feedback Simon.
I am not sure that what I am proposing here is at odds with what you're
referring to (here and in the PR you linked). The key difference AFAICT is
that the pattern I am referring to is probably more aptly described as
"reducing scalarization" than as "vectorization". The reason I say that is
that the inputs are vectors and the output
2020 Jan 10
2
[RFC][SDAG] Convert build_vector of ops on extractelts into ops on input vectors
I have added a few PPC-specific DAG combines in the past that follow this
pattern on specific operations. Now that it appears that this would be
useful to do on yet another operation, I'm wondering what people think
about doing this in the target-independent DAG Combiner for any
legal/custom operation on the target.
TL; DR;
The generic pattern would look like this:
(build_vector (op
2018 Mar 06
2
Heap Exhaustion during 'DAGCombiner::Run'
We discovered what is happening.
SDAGCombiner essentially looks at various combinations of nodes to do with vectors, and when it can, it creates a vector shuffle. The problem is, that our vector shuffle lowering builds new trees with vector element, or vector sub-vector insert sequences. The generic DAGCombiner, reconstructs these into a new shuffle, and so the loop continues - we reduce it,
2019 Nov 21
2
Tablegen PAT limitation?
Hi Krzysztof,
Today I try it on llvm9.0.0 version.
def bos : RPPInstMMEMrr<OPC_STORE,
(outs), (ins MGPR:$rs1, SGPR32:$rbase, MGPR:$roffset, uimm2:$rshift),
!strconcat(opcodestr, ""), "$rs1,
2019 Nov 22
2
Tablegen PAT limitation?
def STOREbos { // InstructionEncoding Instruction RPPInst RPPInstMMEMrr
field bits<32> Inst = { 0, 0, 0, 1, rs1{2}, rs1{1}, rs1{0}, index{0}, 0, 0, 0, 1, 0, rbase{3}, rbase{2}, rbase{1}, rbase{0}, rbase{4}, roffset{4}, roffset{3}, roffset{2}, roffset{1}, roffset{0}, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
field bits<32> SoftFail = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2018 Feb 25
3
Heap Exhaustion during 'DAGCombiner::Run'
Hi LLVM-Devs,
I am in the process of updating our out-of-tree implementation from v5.0 to
v6.0 RC3, and while it builds and mostly runs, I am having trouble with a
small number of tests where the 'WorklistMap' in 'DAGCombiner::Run' never
becomes empty. This is resulting in a runaway state of continuous heap
allocation until the process exhausts all system memory.
But I can't
2019 Nov 25
2
Tablegen PAT limitation?
You are welcome.
I changed the pattern, the same old error pop up again, crash in the same place.
Type set is empty for each HW mode:
possible type contradiction in the pattern below (use -print-records with llvm-tblgen to see all expanded records).
vtInt: (vt:{ *:[Other] })
UNREACHABLE executed at /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:824!
2018 Mar 01
0
Heap Exhaustion during 'DAGCombiner::Run'
Martin:
I suspect this is an issue with post-DAG legalization store merging in the
DAGCombiner. If you have a custom lowered type the DAGCombiner may end up
merging a set of stores and immediately splitting them up in legalization.
You should be able to disable this pass universally by overriding
mergeStoresAfterLegalization() or conditionally for cases that shouldn't
match with
2019 Nov 20
4
Tablegen PAT limitation?
Hi,
The full trace stack:
Type set is empty for each HW mode:
possible type contradiction in the pattern below (use -print-records with llvm-tblgen to see all expanded records).
vtInt: (vt:{ *:[Other] })
UNREACHABLE executed at /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:824!
[ 85%] Building X86GenEVEX2VEXTables.inc...
#0 0x000000000081b9b5
2018 Mar 06
0
Heap Exhaustion during 'DAGCombiner::Run'
Martin:
It sounds like you are doing is more akin to shuffle selection than fusion
and therefore it's a better fit for instruction selection than
DAGCombining. Try movign it to <Target>ISelDAGToDAG's Select (or
potentially PreprocessISelDAG).
Th
-Nirav
On Tue, Mar 6, 2018 at 4:05 PM Martin J. O'Riordan <MartinO at theheart.ie>
wrote:
> We discovered what is
2018 Mar 21
1
[cfe-dev] When to use '-mcpu' versus '-march'
Thanks very much Eric for taking the time to carefully explain this to me.
So if I am the author of the backend for a new processor technology, or willing to modernise my existing implementation, you would recommend that the ‘-mcpu’ option is deprecated and probably best not used at all, or perhaps just as a synonym for ‘-march + -mtune’?
The first part of the target triple guides the
2010 Aug 19
2
[LLVMdev] sret on scalars
I am needing to return i128 as a shadow return due to abi issues on
alpha. The problem I am running into is the code for doing that with
scalars (currently only used for vectors, as far as I can tell) sets
the sret on the parameter. If I just go this path, then I am setting
sret on an integer pointer, which verify objects too. LangRef doesn't
say scalars are allowed to have sret set, but
2018 Mar 01
1
[cfe-dev] Disabling vectorisation at '-O3'
Yes, it looks like passing ‘EnableVec’ and ‘EnableSLPVec’ to ‘Args.hasFlag’ should be replaced with ‘false’ and then it has the expected behaviour.
MartinO
From: cfe-dev [mailto:cfe-dev-bounces at lists.llvm.org] On Behalf Of Martin J. O'Riordan via cfe-dev
Sent: 01 March 2018 18:02
To: 'Richard Smith' <richard at metafoo.co.uk>
Cc: 'Clang Dev'
2018 Aug 03
3
[7.0.0 Release] The release branch is open; trunk is now 8.0.0
Hi Martin,
On Fri, 3 Aug 2018 at 14:10, Martin J. O'Riordan <MartinO at theheart.ie> wrote:
> $ git branch --list
> * master
> martino
By default "git branch" only lists local branches. "git branch -a"
will list all of them, including (for me) "remotes/origin/release_70".
If you just type "git checkout release_70" git will
2018 Jan 01
2
Inspecting 'Triple' from arbitrary source files
Thanks Tim,
Sometimes my hacks last longer than I want as it isn't always apparent how I can implement it properly. At the moment I am looking at changes I need to 'MachineBasicBlock::ReplaceUsesOfBlockWith'. It is most likely that I need to handle the issue in a different way, but the change I need works here for my target for the time being, but breaks X86 which I also build for
2018 Mar 20
0
[cfe-dev] When to use '-mcpu' versus '-march'
Hi Martin,
On Tue, Mar 20, 2018 at 1:18 PM Martin J. O'Riordan <MartinO at theheart.ie>
wrote:
> Thanks Eric,
>
>
>
> After the original reply to my query I had a good look at the GCC
> documentation for these options, and what I discovered is that “there is no
> consensus” in GCC. Basically, saying do what GCC does was a non-answer as
> it clarified nothing.
2018 Mar 20
2
[cfe-dev] When to use '-mcpu' versus '-march'
Thanks Eric,
After the original reply to my query I had a good look at the GCC documentation for these options, and what I discovered is that “there is no consensus” in GCC. Basically, saying do what GCC does was a non-answer as it clarified nothing.
X86 has deprecated ‘-mcpu’ in favour of ‘-mtune’, and it uses ‘-mtune’ to mean that the scheduling, etc. should be biased in favour of more
2010 Aug 23
0
[LLVMdev] sret on scalars
On Aug 19, 2010, at 1:38 PM, Andrew Lenharth wrote:
> I am needing to return i128 as a shadow return due to abi issues on
> alpha. The problem I am running into is the code for doing that with
> scalars (currently only used for vectors, as far as I can tell) sets
> the sret on the parameter. If I just go this path, then I am setting
> sret on an integer pointer, which verify
2016 Aug 29
2
IR canonicalization: vector select or shufflevector?
x86 has also put a lot of effort into shuffle lowering...so much so that it
is its own life-form and brings most online codeviewer apps to their knees
when you try to open X86ISelLowering.cpp. :)
Given that:
1. There are at least 2 targets that lean towards shuffle (Martin's comment
+ x86 uses lowerVSELECTtoVectorShuffle() for all cases like the example
posted here)
2. Size-changing shuffles