- Dec 19, 2012
-
-
Kevin Enderby authored
instructions in the assembly code variant if one exists. The intended use for this is so tools like lldb and darwin's otool(1) can be switched to print Intel-flavored disassembly. I discussed extensively this API with Jim Grosbach and we feel while it may not be fully general, in reality there is only one syntax for each assembly with the exception of X86 which has exactly two for historical reasons. rdar://10989182 llvm-svn: 170477
-
Greg Clayton authored
Don't read the SP when getting argument values from registers in case the SP isn't available. We don't want the availability of SP to limit when we get get arguments from registers. llvm-svn: 170476
-
Jakob Stoklund Olesen authored
The bundle flags are now maintained by the slightly higher-level functions bundleWithPred() / bundleWithSucc() which enforce consistent bundle flags between neighboring instructions. See also MIBundleBuilder for an even higher-level approach to building bundles. llvm-svn: 170475
-
Eli Friedman authored
against itself. PR14489. llvm-svn: 170474
-
Jakob Stoklund Olesen authored
The bundle_iterator::operator++ function now doesn't need to dig out the basic block and check against end(). It can use the isBundledWithSucc() flag to find the last bundled instruction safely. Similarly, MachineInstr::isBundled() no longer needs to look at iterators etc. It only has to look at flags. llvm-svn: 170473
-
Nadav Rotem authored
llvm-svn: 170472
-
rdar://12801297Shuxin Yang authored
InstCombine for unsafe floating-point add/sub. llvm-svn: 170471
-
Nadav Rotem authored
Enable the loop vectorizer in clang and not in the pass manager, so that we can disable it in clang. llvm-svn: 170470
-
Nadav Rotem authored
llvm-svn: 170469
-
Ted Kremenek authored
Have clang_getSpellingLocation() use the same logic as DiagnosticRenderer for plowing through macros. This fixes a subtle bug reported in <rdar://problem/12584554> where a double-nested macro could lead to an incorrect fixit location with live issues. This fix also uncovers a bunch of subtle bugs in our indexer test cases which are now fixed (mostly around source ranges for attributes). llvm-svn: 170468
-
Fariborz Jahanian authored
use clang's formatter. Currently, formatter is used to format declaration tags for xml comments. Since formatter is in flux and its change will break several of the clang comment tests, only a single tests is formatted using this facility. Doug has reviewed and approved it for check-in. llvm-svn: 170467
-
Douglas Gregor authored
llvm-svn: 170466
-
Jakob Stoklund Olesen authored
Now that the bundle flag aware APIs are all in place, it is possible to continuously verify the flag consistency. llvm-svn: 170465
-
- Dec 18, 2012
-
-
Jakub Staszak authored
AVX2 before AVX. llvm-svn: 170464
-
Jakob Stoklund Olesen authored
The new bidirectional bundle flags are redundant, so inadvertent bundle tearing can be detected in the machine code verifier. llvm-svn: 170463
-
Quentin Colombet authored
To not over constrain the scheduler for ARM in thumb mode, some optimizations for code size reduction, specific to ARM thumb, are blocked when they add a dependency (like write after read dependency). Disables this check when code size is the priority, i.e., code is compiled with -Oz. llvm-svn: 170462
-
Eli Bendersky authored
llvm-svn: 170461
-
Jakob Stoklund Olesen authored
The bundle-related MI flags need to be kept in sync with the neighboring instructions. Don't allow the bulk flag-setting setFlags() function to change them. Also don't copy MI flags when cloning an instruction. The clone's bundle flags will be set when it is explicitly inserted into a bundle. llvm-svn: 170459
-
Bill Wendling authored
llvm-svn: 170458
-
Daniel Jasper authored
We used to format initializers like this (with a sort of hacky implementation): Constructor() : Val1(A), Val2(B) { and now format like this (with a somewhat better solution): Constructor() : Val1(A), Val2(B) { assuming this would not fit on a single line. Also added tests. As a side effect we now first analyze whether an UnwrappedLine needs to be split at all. If not, not splitting it is the best solution by definition. As this should be a very common case in normal code, not exploring the entire solution space can provide significant speedup. llvm-svn: 170457
-
Jakob Stoklund Olesen authored
Remove the instr_iterator versions of the splice() functions. It doesn't seem useful to be able to splice sequences of instructions that don't consist of full bundles. The normal splice functions that take MBB::iterator arguments are not changed, and they can move whole bundles around without any problems. llvm-svn: 170456
-
Meador Inge authored
PR 14529 was opened because neither Clang or LLVM was expanding calls to creal* or cimag* into instructions that just load the respective complex field. After some discussion, it was not considered realistic to do this in LLVM because of the platform specific way complex types are expanded. Thus a way to solve this in Clang was pursued. GCC does a similar expansion. This patch adds the feature to Clang by making the creal* and cimag* functions library builtins and modifying the builtin code generator to look for the new builtin types. llvm-svn: 170455
-
Andrew Trick authored
llvm-svn: 170454
-
Andrew Trick authored
llvm-svn: 170453
-
Andrew Trick authored
llvm-svn: 170452
-
Andrew Trick authored
llvm-svn: 170451
-
Andrew Trick authored
llvm-svn: 170450
-
Andrew Trick authored
llvm-svn: 170449
-
Daniel Malea authored
llvm-svn: 170447
-
Daniel Jasper authored
This allows for writing tests including line comments easier and more readable. We will need more of those tests in the future and also line comments are useful to force line breaks in tests. llvm-svn: 170446
-
Daniel Malea authored
- make FreeBSD ProcessMonitor API thread-ready Patch by Matt Kopec! llvm-svn: 170445
-
Douglas Gregor authored
llvm-svn: 170444
-
Jakob Stoklund Olesen authored
The single-element ilist::splice() function supports a noop move: List.splice(I, List, I); The corresponding std::list function doesn't allow that, so add a unit test to document that behavior. This also means that List.splice(I, List, F); is somewhat surprisingly not equivalent to List.splice(I, List, F, next(F)); This patch adds an assertion to catch the illegal case I == F above. Alternatively, we could make I == F a legal noop, but that would make ilist differ even more from std::list. llvm-svn: 170443
-
Enrico Granata authored
Tweaking a comment in the NSURL formatter for correctness - the code was doing the right thing, but the comment was highly misleading llvm-svn: 170441
-
Eli Bendersky authored
llvm-svn: 170440
-
Benjamin Kramer authored
LoopVectorize: Emit reductions as log2(vectorsize) shuffles + vector ops instead of scalar operations. For example on x86 with SSE4.2 a <8 x i8> add reduction becomes movdqa %xmm0, %xmm1 movhlps %xmm1, %xmm1 ## xmm1 = xmm1[1,1] paddw %xmm0, %xmm1 pshufd $1, %xmm1, %xmm0 ## xmm0 = xmm1[1,0,0,0] paddw %xmm1, %xmm0 phaddw %xmm0, %xmm0 pextrb $0, %xmm0, %edx instead of pextrb $2, %xmm0, %esi pextrb $0, %xmm0, %edx addb %sil, %dl pextrb $4, %xmm0, %esi addb %dl, %sil pextrb $6, %xmm0, %edx addb %sil, %dl pextrb $8, %xmm0, %esi addb %dl, %sil pextrb $10, %xmm0, %edi pextrb $14, %xmm0, %edx addb %sil, %dil pextrb $12, %xmm0, %esi addb %dil, %sil addb %sil, %dl llvm-svn: 170439
-
Eli Bendersky authored
llvm-svn: 170438
-
Jakob Stoklund Olesen authored
The normal insert() function takes an MBB::iterator position, and inserts a stand-alone MachineInstr as before. The insert() function that takes an MBB::instr_iterator position can insert instructions inside a bundle, and will now update the bundle flags correctly when that happens. When the insert position is between two bundles, it is unclear whether the instruction should be appended to the previous bundle, prepended to the next bundle, or stand on its own. The MBB::insert() function doesn't bundle the instruction in that case, use the MIBundleBuilder class for that. llvm-svn: 170437
-
Hal Finkel authored
A register can be associated with several distinct register classes. For example, on PPC, the floating point registers are each associated with both F4RC (which holds f32) and F8RC (which holds f64). As a result, this code would fail when provided with a floating point register and an f64 operand because it would happen to find the register in the F4RC class first and return that. From the F4RC class, SDAG would extract f32 as the register type and then assert because of the invalid implied conversion between the f64 value and the f32 register. Instead, search all register classes. If a register class containing the the requested register has the requested type, then return that register class. Otherwise, as before, return the first register class found that contains the requested register. llvm-svn: 170436
-
Marshall Clow authored
llvm-svn: 170435
-