summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/Hexagon
Commit message (Collapse)AuthorAgeFilesLines
...
* [Hexagon] Some cleanup of instruction selection codeKrzysztof Parzyszek2015-04-226-16/+17
| | | | llvm-svn: 235552
* [Hexagon] Use A2_tfrsi for constant pool and jump table addressesKrzysztof Parzyszek2015-04-222-3/+4
| | | | llvm-svn: 235535
* [Hexagon] Patterns for frame index with offset for iselKrzysztof Parzyszek2015-04-211-0/+29
| | | | llvm-svn: 235418
* [opaque pointer type] Add textual IR support for explicit type parameter to ↵David Blaikie2015-04-163-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | the call instruction See r230786 and r230794 for similar changes to gep and load respectively. Call is a bit different because it often doesn't have a single explicit type - usually the type is deduced from the arguments, and just the return type is explicit. In those cases there's no need to change the IR. When that's not the case, the IR usually contains the pointer type of the first operand - but since typed pointers are going away, that representation is insufficient so I'm just stripping the "pointerness" of the explicit type away. This does make the IR a bit weird - it /sort of/ reads like the type of the first operand: "call void () %x(" but %x is actually of type "void ()*" and will eventually be just of type "ptr". But this seems not too bad and I don't think it would benefit from repeating the type ("void (), void () * %x(" and then eventually "void (), ptr %x(") as has been done with gep and load. This also has a side benefit: since the explicit type is no longer a pointer, there's no ambiguity between an explicit type and a function that returns a function pointer. Previously this case needed an explicit type (eg: a function returning a void() function was written as "call void () () * @x(" rather than "call void () * @x(" because of the ambiguity between a function returning a pointer to a void() function and a function returning void). No ambiguity means even function pointer return types can just be written alone, without writing the whole function's type. This leaves /only/ the varargs case where the explicit type is required. Given the special type syntax in call instructions, the regex-fu used for migration was a bit more involved in its own unique way (as every one of these is) so here it is. Use it in conjunction with the apply.sh script and associated find/xargs commands I've provided in rr230786 to migrate your out of tree tests. Do let me know if any of this doesn't cover your cases & we can iterate on a more general script/regexes to help others with out of tree tests. About 9 test cases couldn't be automatically migrated - half of those were functions returning function pointers, where I just had to manually delete the function argument types now that we didn't need an explicit function type there. The other half were typedefs of function types used in calls - just had to manually drop the * from those. import fileinput import sys import re pat = re.compile(r'((?:=|:|^|\s)call\s(?:[^@]*?))(\s*$|\s*(?:(?:\[\[[a-zA-Z0-9_]+\]\]|[@%](?:(")?[\\\?@a-zA-Z0-9_.]*?(?(3)"|)|{{.*}}))(?:\(|$)|undef|inttoptr|bitcast|null|asm).*$)') addrspace_end = re.compile(r"addrspace\(\d+\)\s*\*$") func_end = re.compile("(?:void.*|\)\s*)\*$") def conv(match, line): if not match or re.search(addrspace_end, match.group(1)) or not re.search(func_end, match.group(1)): return line return line[:match.start()] + match.group(1)[:match.group(1).rfind('*')].rstrip() + match.group(2) + line[match.end():] for line in sys.stdin: sys.stdout.write(conv(re.search(pat, line), line)) llvm-svn: 235145
* Revert revisions r234755, r234759, r234760Jan Vesely2015-04-132-5/+15
| | | | | | | | | | | Revert "Remove default in fully-covered switch (to fix Clang -Werror -Wcovered-switch-default)" Revert "R600: Add carry and borrow instructions. Use them to implement UADDO/USUBO" Revert "LegalizeDAG: Try to use Overflow operations when expanding ADD/SUB" Using overflow operations fails CodeGen/Generic/2011-07-07-ScheduleDAGCrash.ll on hexagon, nvptx, and r600. Revert while I investigate. llvm-svn: 234768
* Allow memory intrinsics to be tail callsKrzysztof Parzyszek2015-04-131-0/+31
| | | | llvm-svn: 234764
* LegalizeDAG: Try to use Overflow operations when expanding ADD/SUBJan Vesely2015-04-132-15/+5
| | | | | | | | | | v2: consider BooleanContents when processing overflow Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu> Reviewers: resistor, jholewinsky (nvidia parts) Differential Revision: http://reviews.llvm.org/D6340 llvm-svn: 234755
* Expand MUX instructions early on HexagonKrzysztof Parzyszek2015-03-315-2/+172
| | | | | | This time with all files included. llvm-svn: 233696
* Revert 233694. Weak SVN-fu.Krzysztof Parzyszek2015-03-312-2/+2
| | | | llvm-svn: 233695
* Expand MUX instructions early on HexagonKrzysztof Parzyszek2015-03-312-2/+2
| | | | llvm-svn: 233694
* [Hexagon] Add support for vector instructionsKrzysztof Parzyszek2015-03-1944-0/+1513
| | | | llvm-svn: 232728
* [Hexagon] Intrinsics for circular and bit-reversed loads and storesKrzysztof Parzyszek2015-03-186-0/+768
| | | | llvm-svn: 232645
* [Hexagon] Handle ENDLOOP0 in InsertBranch and RemoveBranchKrzysztof Parzyszek2015-03-181-1/+2
| | | | llvm-svn: 232643
* Missed testcase for r232577Krzysztof Parzyszek2015-03-181-0/+160
| | | | llvm-svn: 232578
* [opaque pointer type] Add textual IR support for explicit type parameter to ↵David Blaikie2015-03-132-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | gep operator Similar to gep (r230786) and load (r230794) changes. Similar migration script can be used to update test cases, which successfully migrated all of LLVM and Polly, but about 4 test cases needed manually changes in Clang. (this script will read the contents of stdin and massage it into stdout - wrap it in the 'apply.sh' script shown in previous commits + xargs to apply it over a large set of test cases) import fileinput import sys import re rep = re.compile(r"(getelementptr(?:\s+inbounds)?\s*\()((<\d*\s+x\s+)?([^@]*?)(|\s*addrspace\(\d+\))\s*\*(?(3)>)\s*)(?=$|%|@|null|undef|blockaddress|getelementptr|addrspacecast|bitcast|inttoptr|zeroinitializer|<|\[\[[a-zA-Z]|\{\{)", re.MULTILINE | re.DOTALL) def conv(match): line = match.group(1) line += match.group(4) line += ", " line += match.group(2) return line line = sys.stdin.read() off = 0 for match in re.finditer(rep, line): sys.stdout.write(line[off:match.start()]) sys.stdout.write(conv(match)) off = match.end() sys.stdout.write(line[off:]) llvm-svn: 232184
* Remove unused complex patterns for addressing modes on Hexagon.Krzysztof Parzyszek2015-03-121-0/+2
| | | | llvm-svn: 232057
* [Hexagon] Removing unused patterns.Colin LeMahieu2015-03-091-3/+2
| | | | llvm-svn: 231723
* [Hexagon] Reapply r231699. Remove assumption that second operand is an ↵Colin LeMahieu2015-03-091-1/+2
| | | | | | immediate when checking if A2_tfrsi is combinable. llvm-svn: 231710
* [Hexagon] Reverting r231699Colin LeMahieu2015-03-091-2/+1
| | | | llvm-svn: 231703
* [Hexagon] Updating constant set to simpler versions.Colin LeMahieu2015-03-091-1/+2
| | | | llvm-svn: 231699
* [Hexagon] Eliminating immediate condition set.Colin LeMahieu2015-03-093-0/+3
| | | | llvm-svn: 231693
* DebugInfo: Move new hierarchy into placeDuncan P. N. Exon Smith2015-03-031-19/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Move the specialized metadata nodes for the new debug info hierarchy into place, finishing off PR22464. I've done bootstraps (and all that) and I'm confident this commit is NFC as far as DWARF output is concerned. Let me know if I'm wrong :). The code changes are fairly mechanical: - Bumped the "Debug Info Version". - `DIBuilder` now creates the appropriate subclass of `MDNode`. - Subclasses of DIDescriptor now expect to hold their "MD" counterparts (e.g., `DIBasicType` expects `MDBasicType`). - Deleted a ton of dead code in `AsmWriter.cpp` and `DebugInfo.cpp` for printing comments. - Big update to LangRef to describe the nodes in the new hierarchy. Feel free to make it better. Testcase changes are enormous. There's an accompanying clang commit on its way. If you have out-of-tree debug info testcases, I just broke your build. - `upgrade-specialized-nodes.sh` is attached to PR22564. I used it to update all the IR testcases. - Unfortunately I failed to find way to script the updates to CHECK lines, so I updated all of these by hand. This was fairly painful, since the old CHECKs are difficult to reason about. That's one of the benefits of the new hierarchy. This work isn't quite finished, BTW. The `DIDescriptor` subclasses are almost empty wrappers, but not quite: they still have loose casting checks (see the `RETURN_FROM_RAW()` macro). Once they're completely gutted, I'll rename the "MD" classes to "DI" and kill the wrappers. I also expect to make a few schema changes now that it's easier to reason about everything. llvm-svn: 231082
* [opaque pointer type] Add textual IR support for explicit type parameter to ↵David Blaikie2015-02-2764-344/+344
| | | | | | | | | | | | | | | | | | | | | | | | load instruction Essentially the same as the GEP change in r230786. A similar migration script can be used to update test cases, though a few more test case improvements/changes were required this time around: (r229269-r229278) import fileinput import sys import re pat = re.compile(r"((?:=|:|^)\s*load (?:atomic )?(?:volatile )?(.*?))(| addrspace\(\d+\) *)\*($| *(?:%|@|null|undef|blockaddress|getelementptr|addrspacecast|bitcast|inttoptr|\[\[[a-zA-Z]|\{\{).*$)") for line in sys.stdin: sys.stdout.write(re.sub(pat, r"\1, \2\3*\4", line)) Reviewers: rafael, dexonsmith, grosser Differential Revision: http://reviews.llvm.org/D7649 llvm-svn: 230794
* [opaque pointer type] Add textual IR support for explicit type parameter to ↵David Blaikie2015-02-2723-200/+200
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | getelementptr instruction One of several parallel first steps to remove the target type of pointers, replacing them with a single opaque pointer type. This adds an explicit type parameter to the gep instruction so that when the first parameter becomes an opaque pointer type, the type to gep through is still available to the instructions. * This doesn't modify gep operators, only instructions (operators will be handled separately) * Textual IR changes only. Bitcode (including upgrade) and changing the in-memory representation will be in separate changes. * geps of vectors are transformed as: getelementptr <4 x float*> %x, ... ->getelementptr float, <4 x float*> %x, ... Then, once the opaque pointer type is introduced, this will ultimately look like: getelementptr float, <4 x ptr> %x with the unambiguous interpretation that it is a vector of pointers to float. * address spaces remain on the pointer, not the type: getelementptr float addrspace(1)* %x ->getelementptr float, float addrspace(1)* %x Then, eventually: getelementptr float, ptr addrspace(1) %x Importantly, the massive amount of test case churn has been automated by same crappy python code. I had to manually update a few test cases that wouldn't fit the script's model (r228970,r229196,r229197,r229198). The python script just massages stdin and writes the result to stdout, I then wrapped that in a shell script to handle replacing files, then using the usual find+xargs to migrate all the files. update.py: import fileinput import sys import re ibrep = re.compile(r"(^.*?[^%\w]getelementptr inbounds )(((?:<\d* x )?)(.*?)(| addrspace\(\d\)) *\*(|>)(?:$| *(?:%|@|null|undef|blockaddress|getelementptr|addrspacecast|bitcast|inttoptr|\[\[[a-zA-Z]|\{\{).*$))") normrep = re.compile( r"(^.*?[^%\w]getelementptr )(((?:<\d* x )?)(.*?)(| addrspace\(\d\)) *\*(|>)(?:$| *(?:%|@|null|undef|blockaddress|getelementptr|addrspacecast|bitcast|inttoptr|\[\[[a-zA-Z]|\{\{).*$))") def conv(match, line): if not match: return line line = match.groups()[0] if len(match.groups()[5]) == 0: line += match.groups()[2] line += match.groups()[3] line += ", " line += match.groups()[1] line += "\n" return line for line in sys.stdin: if line.find("getelementptr ") == line.find("getelementptr inbounds"): if line.find("getelementptr inbounds") != line.find("getelementptr inbounds ("): line = conv(re.match(ibrep, line), line) elif line.find("getelementptr ") != line.find("getelementptr ("): line = conv(re.match(normrep, line), line) sys.stdout.write(line) apply.sh: for name in "$@" do python3 `dirname "$0"`/update.py < "$name" > "$name.tmp" && mv "$name.tmp" "$name" rm -f "$name.tmp" done The actual commands: From llvm/src: find test/ -name *.ll | xargs ./apply.sh From llvm/src/tools/clang: find test/ -name *.mm -o -name *.m -o -name *.cpp -o -name *.c | xargs -I '{}' ../../apply.sh "{}" From llvm/src/tools/polly: find test/ -name *.ll | xargs ./apply.sh After that, check-all (with llvm, clang, clang-tools-extra, lld, compiler-rt, and polly all checked out). The extra 'rm' in the apply.sh script is due to a few files in clang's test suite using interesting unicode stuff that my python script was throwing exceptions on. None of those files needed to be migrated, so it seemed sufficient to ignore those cases. Reviewers: rafael, dexonsmith, grosser Differential Revision: http://reviews.llvm.org/D7636 llvm-svn: 230786
* [Hexagon] Factoring classes out of store patterns.Colin LeMahieu2015-02-091-11/+6
| | | | llvm-svn: 228602
* [Hexagon] Simplifying and formatting several patterns. Changing a pattern ↵Colin LeMahieu2015-02-051-2/+2
| | | | | | multiply to be expanded. llvm-svn: 228347
* [Hexagon] Adding encoding information for absolute-reg mode stores. ↵Colin LeMahieu2015-02-041-1/+2
| | | | | | Xfailing a test until constant extenders are correctly put in the same packet. llvm-svn: 228158
* [Hexagon] Converting XTYPE/SHIFT intrinsics. Cleaning out old intrinsic ↵Colin LeMahieu2015-02-033-2/+90
| | | | | | patterns and updating tests. llvm-svn: 228026
* [Hexagon] Updating XTYPE/PRED intrinsics.Colin LeMahieu2015-02-031-1/+154
| | | | llvm-svn: 228019
* [Hexagon] Updating XTYPE/PERM intrinsics.Colin LeMahieu2015-02-031-0/+206
| | | | llvm-svn: 228015
* [Hexagon] Adding missing vector multiply instruction encodings. Converting ↵Colin LeMahieu2015-02-031-0/+390
| | | | | | multiply intrinsics and updating tests. llvm-svn: 228010
* [Hexagon] Converting complex number intrinsics and adding tests.Colin LeMahieu2015-02-031-0/+349
| | | | llvm-svn: 227995
* [Hexagon] Adding vector intrinsics for alu32/alu and xtype/alu.Colin LeMahieu2015-02-032-0/+533
| | | | llvm-svn: 227993
* [Hexagon] Deleting old variants of intrinsics and adding missing tests.Colin LeMahieu2015-01-293-10/+95
| | | | llvm-svn: 227474
* [Hexagon] Adding CR intrinsic tests.Colin LeMahieu2015-01-291-0/+76
| | | | llvm-svn: 227463
* [Hexagon] Adding XTYPE/PRED intrinsic tests. Converting predicate types to ↵Colin LeMahieu2015-01-293-50/+255
| | | | | | i32 instead of i1. llvm-svn: 227457
* [Hexagon] Updating several V5 intrinsics and adding FP tests.Colin LeMahieu2015-01-282-0/+876
| | | | llvm-svn: 227379
* [Hexagon] Adding XTYPE/MPY intrinsic tests and some missing multiply ↵Colin LeMahieu2015-01-281-0/+1135
| | | | | | instructions. llvm-svn: 227347
* [Hexagon] Deleting a lot of old variants of intrinsics and updating references.Colin LeMahieu2015-01-281-3/+3
| | | | llvm-svn: 227338
* [Hexagon] Converting XTYPE/BIT intrinsic patterns and adding tests.Colin LeMahieu2015-01-281-0/+329
| | | | llvm-svn: 227335
* [Hexagon] Replacing XTYPE/SHIFT intrinsic patternss. Adding tests and ↵Colin LeMahieu2015-01-281-0/+635
| | | | | | missing instructions with tests. llvm-svn: 227330
* [Hexagon] Replacing old intrinsic tests with organized versions that match ↵Colin LeMahieu2015-01-2811-2293/+265
| | | | | | the reference manual. llvm-svn: 227321
* [Hexagon] Converting multiply and accumulate with immediate intrinsics to ↵Colin LeMahieu2015-01-211-0/+120
| | | | | | patterns. llvm-svn: 226681
* [Hexagon] Adding intrinsics for doubleword ALU operations.Colin LeMahieu2015-01-201-0/+34
| | | | llvm-svn: 226606
* [Hexagon] Removing unnecessary clutter in intrinsic tests.Colin LeMahieu2015-01-201-18/+9
| | | | llvm-svn: 226602
* [Hexagon] Updating muxir/ri/ii intrinsics. Setting predicate registers as ↵Colin LeMahieu2015-01-191-0/+36
| | | | | | compatible with i32 rather than doing custom type conversion. llvm-svn: 226500
* [Hexagon] Converting intrinsics combine imm/imm, simple shifts and extends.Colin LeMahieu2015-01-192-0/+93
| | | | llvm-svn: 226483
* [Hexagon] Converting remaining ALU32/ALU intrinsics.Colin LeMahieu2015-01-191-0/+22
| | | | llvm-svn: 226480
* [Hexagon] Converting ALU32/ALU intrinsics to new patterns.Colin LeMahieu2015-01-191-0/+119
| | | | llvm-svn: 226478
* [Hexagon] Converting halfword to double accumulating multiply intrinsics.Colin LeMahieu2015-01-191-0/+390
| | | | llvm-svn: 226472
OpenPOWER on IntegriCloud