Commit message (Collapse) | Author | Age | Files | Lines | ||
---|---|---|---|---|---|---|
... | ||||||
* | [Hexagon] Make sure that offset on globals matches alignment requirements | Krzysztof Parzyszek | 2018-01-26 | 1 | -0/+32 | |
| | | | | | | | | | | | | | A correctly aligned address may happen to be separated into a variable part and a constant part, where the constant part does not match the alignment needed in a load/store that uses this address. Such a constant cannot be used as an immediate offset in an indexed instruction. When lowering a global address, make sure that if there is an offset folded into the global, the offset is valid for all uses in load/store instructions. llvm-svn: 323562 | |||||
* | [Hexagon] Replace multiple vector extracts with store-load combinations | Krzysztof Parzyszek | 2018-01-26 | 1 | -0/+26 | |
| | | | | llvm-svn: 323561 | |||||
* | [Hexagon] Fix an incorrect assertion in HexagonConstExtenders | Krzysztof Parzyszek | 2018-01-26 | 1 | -0/+54 | |
| | | | | llvm-svn: 323548 | |||||
* | [Hexagon] SETEQ and SETNE are valid integer condition codes | Krzysztof Parzyszek | 2018-01-25 | 1 | -0/+21 | |
| | | | | llvm-svn: 323452 | |||||
* | [Hexagon] Run late copy propagation and dead code elimination passes | Krzysztof Parzyszek | 2018-01-24 | 10 | -37/+43 | |
| | | | | llvm-svn: 323346 | |||||
* | [NFC] fix trivial typos in comments | Hiroshi Inoue | 2018-01-24 | 1 | -1/+1 | |
| | | | | | | "the the" -> "the" llvm-svn: 323302 | |||||
* | [Hexagon] Add patterns for sext_inreg of HVX vector types | Krzysztof Parzyszek | 2018-01-23 | 1 | -0/+54 | |
| | | | | llvm-svn: 323250 | |||||
* | [Hexagon] Implement basic vector operations on vectors vNi1 | Krzysztof Parzyszek | 2018-01-23 | 4 | -0/+155 | |
| | | | | | | | | | | | In addition to that, make sure that there are no boolean vector types that are associated with multiple register classes. Specifically, remove v32i1 and v64i1 from integer register classes. These types will correspond to results of vector comparisons, and as such should belong to the vector predicate class. Having them in scalar registers as well makes legalization ambiguous. llvm-svn: 323229 | |||||
* | Remove alignment argument from memcpy/memmove/memset in favour of alignment ↵ | Daniel Neilson | 2018-01-19 | 8 | -29/+29 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | attributes (Step 1) Summary: This is a resurrection of work first proposed and discussed in Aug 2015: http://lists.llvm.org/pipermail/llvm-dev/2015-August/089384.html and initially landed (but then backed out) in Nov 2015: http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20151109/312083.html The @llvm.memcpy/memmove/memset intrinsics currently have an explicit argument which is required to be a constant integer. It represents the alignment of the dest (and source), and so must be the minimum of the actual alignment of the two. This change is the first in a series that allows source and dest to each have their own alignments by using the alignment attribute on their arguments. In this change we: 1) Remove the alignment argument. 2) Add alignment attributes to the source & dest arguments. We, temporarily, require that the alignments for source & dest be equal. For example, code which used to read: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* %src, i32 100, i32 4, i1 false) will now read call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %dest, i8* align 4 %src, i32 100, i1 false) Downstream users may have to update their lit tests that check for @llvm.memcpy/memmove/memset call/declaration patterns. The following extended sed script may help with updating the majority of your tests, but it does not catch all possible patterns so some manual checking and updating will be required. s~declare void @llvm\.mem(set|cpy|move)\.p([^(]*)\((.*), i32, i1\)~declare void @llvm.mem\1.p\2(\3, i1)~g s~call void @llvm\.memset\.p([^(]*)i8\(i8([^*]*)\* (.*), i8 (.*), i8 (.*), i32 [01], i1 ([^)]*)\)~call void @llvm.memset.p\1i8(i8\2* \3, i8 \4, i8 \5, i1 \6)~g s~call void @llvm\.memset\.p([^(]*)i16\(i8([^*]*)\* (.*), i8 (.*), i16 (.*), i32 [01], i1 ([^)]*)\)~call void @llvm.memset.p\1i16(i8\2* \3, i8 \4, i16 \5, i1 \6)~g s~call void @llvm\.memset\.p([^(]*)i32\(i8([^*]*)\* (.*), i8 (.*), i32 (.*), i32 [01], i1 ([^)]*)\)~call void @llvm.memset.p\1i32(i8\2* \3, i8 \4, i32 \5, i1 \6)~g s~call void @llvm\.memset\.p([^(]*)i64\(i8([^*]*)\* (.*), i8 (.*), i64 (.*), i32 [01], i1 ([^)]*)\)~call void @llvm.memset.p\1i64(i8\2* \3, i8 \4, i64 \5, i1 \6)~g s~call void @llvm\.memset\.p([^(]*)i128\(i8([^*]*)\* (.*), i8 (.*), i128 (.*), i32 [01], i1 ([^)]*)\)~call void @llvm.memset.p\1i128(i8\2* \3, i8 \4, i128 \5, i1 \6)~g s~call void @llvm\.memset\.p([^(]*)i8\(i8([^*]*)\* (.*), i8 (.*), i8 (.*), i32 ([0-9]*), i1 ([^)]*)\)~call void @llvm.memset.p\1i8(i8\2* align \6 \3, i8 \4, i8 \5, i1 \7)~g s~call void @llvm\.memset\.p([^(]*)i16\(i8([^*]*)\* (.*), i8 (.*), i16 (.*), i32 ([0-9]*), i1 ([^)]*)\)~call void @llvm.memset.p\1i16(i8\2* align \6 \3, i8 \4, i16 \5, i1 \7)~g s~call void @llvm\.memset\.p([^(]*)i32\(i8([^*]*)\* (.*), i8 (.*), i32 (.*), i32 ([0-9]*), i1 ([^)]*)\)~call void @llvm.memset.p\1i32(i8\2* align \6 \3, i8 \4, i32 \5, i1 \7)~g s~call void @llvm\.memset\.p([^(]*)i64\(i8([^*]*)\* (.*), i8 (.*), i64 (.*), i32 ([0-9]*), i1 ([^)]*)\)~call void @llvm.memset.p\1i64(i8\2* align \6 \3, i8 \4, i64 \5, i1 \7)~g s~call void @llvm\.memset\.p([^(]*)i128\(i8([^*]*)\* (.*), i8 (.*), i128 (.*), i32 ([0-9]*), i1 ([^)]*)\)~call void @llvm.memset.p\1i128(i8\2* align \6 \3, i8 \4, i128 \5, i1 \7)~g s~call void @llvm\.mem(cpy|move)\.p([^(]*)i8\(i8([^*]*)\* (.*), i8([^*]*)\* (.*), i8 (.*), i32 [01], i1 ([^)]*)\)~call void @llvm.mem\1.p\2i8(i8\3* \4, i8\5* \6, i8 \7, i1 \8)~g s~call void @llvm\.mem(cpy|move)\.p([^(]*)i16\(i8([^*]*)\* (.*), i8([^*]*)\* (.*), i16 (.*), i32 [01], i1 ([^)]*)\)~call void @llvm.mem\1.p\2i16(i8\3* \4, i8\5* \6, i16 \7, i1 \8)~g s~call void @llvm\.mem(cpy|move)\.p([^(]*)i32\(i8([^*]*)\* (.*), i8([^*]*)\* (.*), i32 (.*), i32 [01], i1 ([^)]*)\)~call void @llvm.mem\1.p\2i32(i8\3* \4, i8\5* \6, i32 \7, i1 \8)~g s~call void @llvm\.mem(cpy|move)\.p([^(]*)i64\(i8([^*]*)\* (.*), i8([^*]*)\* (.*), i64 (.*), i32 [01], i1 ([^)]*)\)~call void @llvm.mem\1.p\2i64(i8\3* \4, i8\5* \6, i64 \7, i1 \8)~g s~call void @llvm\.mem(cpy|move)\.p([^(]*)i128\(i8([^*]*)\* (.*), i8([^*]*)\* (.*), i128 (.*), i32 [01], i1 ([^)]*)\)~call void @llvm.mem\1.p\2i128(i8\3* \4, i8\5* \6, i128 \7, i1 \8)~g s~call void @llvm\.mem(cpy|move)\.p([^(]*)i8\(i8([^*]*)\* (.*), i8([^*]*)\* (.*), i8 (.*), i32 ([0-9]*), i1 ([^)]*)\)~call void @llvm.mem\1.p\2i8(i8\3* align \8 \4, i8\5* align \8 \6, i8 \7, i1 \9)~g s~call void @llvm\.mem(cpy|move)\.p([^(]*)i16\(i8([^*]*)\* (.*), i8([^*]*)\* (.*), i16 (.*), i32 ([0-9]*), i1 ([^)]*)\)~call void @llvm.mem\1.p\2i16(i8\3* align \8 \4, i8\5* align \8 \6, i16 \7, i1 \9)~g s~call void @llvm\.mem(cpy|move)\.p([^(]*)i32\(i8([^*]*)\* (.*), i8([^*]*)\* (.*), i32 (.*), i32 ([0-9]*), i1 ([^)]*)\)~call void @llvm.mem\1.p\2i32(i8\3* align \8 \4, i8\5* align \8 \6, i32 \7, i1 \9)~g s~call void @llvm\.mem(cpy|move)\.p([^(]*)i64\(i8([^*]*)\* (.*), i8([^*]*)\* (.*), i64 (.*), i32 ([0-9]*), i1 ([^)]*)\)~call void @llvm.mem\1.p\2i64(i8\3* align \8 \4, i8\5* align \8 \6, i64 \7, i1 \9)~g s~call void @llvm\.mem(cpy|move)\.p([^(]*)i128\(i8([^*]*)\* (.*), i8([^*]*)\* (.*), i128 (.*), i32 ([0-9]*), i1 ([^)]*)\)~call void @llvm.mem\1.p\2i128(i8\3* align \8 \4, i8\5* align \8 \6, i128 \7, i1 \9)~g The remaining changes in the series will: Step 2) Expand the IRBuilder API to allow creation of memcpy/memmove with differing source and dest alignments. Step 3) Update Clang to use the new IRBuilder API. Step 4) Update Polly to use the new IRBuilder API. Step 5) Update LLVM passes that create memcpy/memmove calls to use the new IRBuilder API, and those that use use MemIntrinsicInst::[get|set]Alignment() to use getDestAlignment() and getSourceAlignment() instead. Step 6) Remove the single-alignment IRBuilder API for memcpy/memmove, and the MemIntrinsicInst::[get|set]Alignment() methods. Reviewers: pete, hfinkel, lhames, reames, bollu Reviewed By: reames Subscribers: niosHD, reames, jholewinski, qcolombet, jfb, sanjoy, arsenm, dschuff, dylanmckay, mehdi_amini, sdardis, nemanjai, david2050, nhaehnle, javed.absar, sbc100, jgravelle-google, eraman, aheejin, kbarton, JDevlieghere, asb, rbar, johnrusso, simoncook, jordy.potman.lists, apazos, sabuasal, llvm-commits Differential Revision: https://reviews.llvm.org/D41675 llvm-svn: 322965 | |||||
* | [Hexagon] Rewrite LowerVECTOR_SHUFFLE for 32-/64-bit vectors | Krzysztof Parzyszek | 2018-01-15 | 2 | -0/+152 | |
| | | | | | | | The old implementation was not always correct. The new one recognizes more shuffles that match specific instructions. llvm-svn: 322498 | |||||
* | [Hexagon] Fix building 64-bit vector from constant values | Krzysztof Parzyszek | 2018-01-11 | 1 | -0/+8 | |
| | | | | | | The constants were aggregated in a reverse order. llvm-svn: 322303 | |||||
* | [Hexagon] Cast elements to correct type when creating constant vector | Krzysztof Parzyszek | 2018-01-11 | 1 | -0/+12 | |
| | | | | llvm-svn: 322301 | |||||
* | [Hexagon] Even simpler patterns for sign- and zero-extending HVX vectors | Krzysztof Parzyszek | 2018-01-05 | 3 | -50/+18 | |
| | | | | | | Recommit r321897 with updated testcases. llvm-svn: 321908 | |||||
* | Revert r321894: it requires a part of another commit that is not ready yet | Krzysztof Parzyszek | 2018-01-05 | 1 | -54/+0 | |
| | | | | | | | Commit message: [Hexagon] Add patterns for sext_inreg of HVX vector types llvm-svn: 321904 | |||||
* | [Hexagon] Add patterns for truncating HVX vector types | Krzysztof Parzyszek | 2018-01-05 | 1 | -0/+18 | |
| | | | | | | Only non-bool vectors. llvm-svn: 321895 | |||||
* | [Hexagon] Add patterns for sext_inreg of HVX vector types | Krzysztof Parzyszek | 2018-01-05 | 1 | -0/+54 | |
| | | | | llvm-svn: 321894 | |||||
* | [Hexagon] Add a bitcast to required type in LowerHvxMul | Krzysztof Parzyszek | 2018-01-05 | 1 | -0/+29 | |
| | | | | llvm-svn: 321893 | |||||
* | [Hexagon] Add pattern for vsplat to v8i8 | Krzysztof Parzyszek | 2018-01-05 | 1 | -0/+40 | |
| | | | | llvm-svn: 321892 | |||||
* | [Hexagon] Fix generation of vector sign extensions | Krzysztof Parzyszek | 2018-01-02 | 2 | -16/+48 | |
| | | | | llvm-svn: 321650 | |||||
* | [Hexagon] Allow construction of HVX vector predicates | Krzysztof Parzyszek | 2017-12-20 | 5 | -9/+45 | |
| | | | | | | Handle BUILD_VECTOR of boolean values. llvm-svn: 321220 | |||||
* | [Hexagon] Adjust the value type for BCvt in LowerFormalArguments | Krzysztof Parzyszek | 2017-12-20 | 1 | -0/+14 | |
| | | | | llvm-svn: 321177 | |||||
* | [Hexagon] Cache loads to select to avoid traversing mutating DAG | Krzysztof Parzyszek | 2017-12-18 | 1 | -0/+32 | |
| | | | | llvm-svn: 321034 | |||||
* | [Hexagon] Generate HVX code for vector sign-, zero- and any-extends | Krzysztof Parzyszek | 2017-12-18 | 3 | -0/+130 | |
| | | | | | | Implement any-extend as zero-extend. llvm-svn: 321004 | |||||
* | [Hexagon] Handle concat_vectors of all allowed HVX types | Krzysztof Parzyszek | 2017-12-15 | 3 | -0/+82 | |
| | | | | llvm-svn: 320865 | |||||
* | [Hexagon] Fix operand-swapping PatFrag for atomic stores | Krzysztof Parzyszek | 2017-12-15 | 1 | -0/+68 | |
| | | | | | | | PatFrag now has the atomicity information stored as bit fields. They need to be copied to the new PatFrag. llvm-svn: 320855 | |||||
* | [Hexagon] Generate HVX code for comparisons and selects | Krzysztof Parzyszek | 2017-12-14 | 2 | -0/+588 | |
| | | | | llvm-svn: 320744 | |||||
* | [Hexagon] Relax some checks in testcases, NFC | Krzysztof Parzyszek | 2017-12-12 | 2 | -95/+95 | |
| | | | | llvm-svn: 320529 | |||||
* | [Hexagon] Better detection of identity and undef masks in shuffles | Krzysztof Parzyszek | 2017-12-12 | 1 | -6/+4 | |
| | | | | llvm-svn: 320523 | |||||
* | [Hexagon] Fix wrong order of operands for vmux | Krzysztof Parzyszek | 2017-12-12 | 1 | -0/+15 | |
| | | | | | | | | | | | | Shuffle generation uses vmux to collapse vectors resulting from two individual shuffles into one. The indexes of the elements selected from the first operand were indicated by 0xFF in the constant vector used in the compare instruction, but the compare (veqb) set the bits corresponding to the 0x00 elements, thus inverting the selection. Reverse the order of operands to vmux to get the correct output. llvm-svn: 320516 | |||||
* | [MachineOperand][MIR] Add isRenamable to MachineOperand. | Geoff Berry | 2017-12-12 | 1 | -1/+1 | |
| | | | | | | | | | | | | | | | | | | Summary: Add isRenamable() predicate to MachineOperand. This predicate can be used by machine passes after register allocation to determine whether it is safe to rename a given register operand. Register operands that aren't marked as renamable may be required to be assigned their current register to satisfy constraints that are not captured by the machine IR (e.g. ABI or ISA constraints). Reviewers: qcolombet, MatzeB, hfinkel Subscribers: nemanjai, mcrosier, javed.absar, llvm-commits Differential Revision: https://reviews.llvm.org/D39400 llvm-svn: 320503 | |||||
* | [Hexagon] Add support for Hexagon V65 | Krzysztof Parzyszek | 2017-12-11 | 7 | -1/+464 | |
| | | | | llvm-svn: 320404 | |||||
* | [Hexagon] Crash in instruction selection for insert_vector_elt for HVX | Krzysztof Parzyszek | 2017-12-11 | 1 | -0/+23 | |
| | | | | | | | | A wrong type was passed to insertVector, causing an out-of-bounds value to be added an an operand to HexagonISD::INSERT. This later failed in instruction selection. llvm-svn: 320369 | |||||
* | [Hexagon] Generate HVX code for basic arithmetic operations | Krzysztof Parzyszek | 2017-12-07 | 1 | -0/+278 | |
| | | | | | | Handle and, or, xor, add, sub, mul for vectors of i8, i16, and i32. llvm-svn: 320063 | |||||
* | [CodeGen] Use MachineOperand::print in the MIRPrinter for MO_Register. | Francis Visoiu Mistrih | 2017-12-07 | 2 | -8/+8 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Work towards the unification of MIR and debug output by refactoring the interfaces. For MachineOperand::print, keep a simple version that can be easily called from `dump()`, and a more complex one which will be called from both the MIRPrinter and MachineInstr::print. Add extra checks inside MachineOperand for detached operands (operands with getParent() == nullptr). https://reviews.llvm.org/D40836 * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/kill: ([^ ]+) ([^ ]+)<def> ([^ ]+)/kill: \1 def \2 \3/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/kill: ([^ ]+) ([^ ]+) ([^ ]+)<def>/kill: \1 \2 def \3/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/kill: def ([^ ]+) ([^ ]+) ([^ ]+)<def>/kill: def \1 \2 def \3/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/<def>//g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<kill>/killed \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<imp-use,kill>/implicit killed \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<dead>/dead \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<def[ ]*,[ ]*dead>/dead \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<imp-def[ ]*,[ ]*dead>/implicit-def dead \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<imp-def>/implicit-def \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<imp-use>/implicit \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<internal>/internal \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<undef>/undef \1/g' llvm-svn: 320022 | |||||
* | [Hexagon] Recognize vdealb, vdealh, vshuffb and vshuffh specifically | Krzysztof Parzyszek | 2017-12-06 | 1 | -0/+62 | |
| | | | | llvm-svn: 319978 | |||||
* | [Hexagon] Handle perfect shuffles on single vectors | Krzysztof Parzyszek | 2017-12-06 | 1 | -0/+20 | |
| | | | | llvm-svn: 319965 | |||||
* | [Hexagon] Generate HVX code for vector construction and access | Krzysztof Parzyszek | 2017-12-06 | 15 | -0/+5865 | |
| | | | | | | | | | | Support for: - build vector, - extract vector element, subvector, - insert vector element, subvector, - shuffle. llvm-svn: 319901 | |||||
* | [CodeGen] Unify MBB reference format in both MIR and debug output | Francis Visoiu Mistrih | 2017-12-04 | 3 | -5/+5 | |
| | | | | | | | | | | | | | | | | As part of the unification of the debug format and the MIR format, print MBB references as '%bb.5'. The MIR printer prints the IR name of a MBB only for block definitions. * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" \) -type f -print0 | xargs -0 sed -i '' -E 's/BB#" << ([a-zA-Z0-9_]+)->getNumber\(\)/" << printMBBReference(*\1)/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" \) -type f -print0 | xargs -0 sed -i '' -E 's/BB#" << ([a-zA-Z0-9_]+)\.getNumber\(\)/" << printMBBReference(\1)/g' * find . \( -name "*.txt" -o -name "*.s" -o -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" \) -type f -print0 | xargs -0 sed -i '' -E 's/BB#([0-9]+)/%bb.\1/g' * grep -nr 'BB#' and fix Differential Revision: https://reviews.llvm.org/D40422 llvm-svn: 319665 | |||||
* | [Hexagon] Fix wrong check in test/CodeGen/Hexagon/newvaluejump-solo.mir | Krzysztof Parzyszek | 2017-11-30 | 1 | -1/+1 | |
| | | | | llvm-svn: 319476 | |||||
* | [Hexagon] Fix wrong pass in testcase | Krzysztof Parzyszek | 2017-11-30 | 1 | -1/+1 | |
| | | | | llvm-svn: 319471 | |||||
* | [Hexagon] Solo instructions cannot be used with new value jumps | Krzysztof Parzyszek | 2017-11-30 | 1 | -0/+19 | |
| | | | | llvm-svn: 319470 | |||||
* | [CodeGen] Always use `printReg` to print registers in both MIR and debug | Francis Visoiu Mistrih | 2017-11-30 | 2 | -11/+11 | |
| | | | | | | | | | | | | | | output As part of the unification of the debug format and the MIR format, always use `printReg` to print all kinds of registers. Updated the tests using '_' instead of '%noreg' until we decide which one we want to be the default one. Differential Revision: https://reviews.llvm.org/D40421 llvm-svn: 319445 | |||||
* | [CodeGen] Print "%vreg0" as "%0" in both MIR and debug output | Francis Visoiu Mistrih | 2017-11-30 | 3 | -7/+7 | |
| | | | | | | | | | | | | | | | | | As part of the unification of the debug format and the MIR format, avoid printing "vreg" for virtual registers (which is one of the current MIR possibilities). Basically: * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" \) -type f -print0 | xargs -0 sed -i '' -E "s/%vreg([0-9]+)/%\1/g" * grep -nr '%vreg' . and fix if needed * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" \) -type f -print0 | xargs -0 sed -i '' -E "s/ vreg([0-9]+)/ %\1/g" * grep -nr 'vreg[0-9]\+' . and fix if needed Differential Revision: https://reviews.llvm.org/D40420 llvm-svn: 319427 | |||||
* | [Hexagon] Remove HexagonISD::PACKHL | Krzysztof Parzyszek | 2017-11-29 | 1 | -1/+1 | |
| | | | | llvm-svn: 319352 | |||||
* | [Hexagon] Make sure to zero-extend bytes before building a vector | Krzysztof Parzyszek | 2017-11-28 | 1 | -0/+17 | |
| | | | | llvm-svn: 319204 | |||||
* | [Hexagon] Implement buildVector32 and buildVector64 as utility functions | Krzysztof Parzyszek | 2017-11-22 | 3 | -2/+12 | |
| | | | | | | | | | Change LowerBUILD_VECTOR to use those functions. This commit will tempora- rily affect constant vector generation (it will generate constant-extended values instead of non-extended combines), but the code for the general case should be better. The constant selection part will be fixed later. llvm-svn: 318877 | |||||
* | [Hexagon] Add patterns to select A2_combine_ll and its variants | Krzysztof Parzyszek | 2017-11-22 | 2 | -1/+44 | |
| | | | | llvm-svn: 318876 | |||||
* | [Hexagon] Remove trailing spaces, NFC | Krzysztof Parzyszek | 2017-11-22 | 6 | -6/+6 | |
| | | | | llvm-svn: 318875 | |||||
* | [Hexagon] Make sure that RDF does not remove EH_LABELs | Krzysztof Parzyszek | 2017-11-21 | 1 | -0/+17 | |
| | | | | | | | Since EH_LABELs (and other labels) no longer have "side-effects", they should be checked for separately. llvm-svn: 318801 | |||||
* | [Hexagon] Prefer L2_loadrub_io over L4_loadrub_rr | Krzysztof Parzyszek | 2017-11-02 | 1 | -0/+10 | |
| | | | | | | | If the offset is an immediate, avoid putting it in a register to get Rs+Rt<<#0. llvm-svn: 317275 |