- Mar 10, 2014
-
-
Sebastian Pop authored
llvm-svn: 203492
-
Justin Bogner authored
Extend the error message generated by the Verifier when an intrinsic name does not match the expected mangling to include the expected name. Simplifies debugging. Patch by Philip Reames! llvm-svn: 203490
-
Benjamin Kramer authored
MemCpyOpt: When merging memsets also merge the trivial case of two memsets with the same destination. The testcase is from PR19092, but I think the bug described there is actually a clang issue. llvm-svn: 203489
-
Evan Cheng authored
optimize a call to a llvm intrinsic to something that invovles a call to a C library call, make sure it sets the right calling convention on the call. e.g. extern double pow(double, double); double t(double x) { return pow(10, x); } Compiles to something like this for AAPCS-VFP: define arm_aapcs_vfpcc double @t(double %x) #0 { entry: %0 = call double @llvm.pow.f64(double 1.000000e+01, double %x) ret double %0 } declare double @llvm.pow.f64(double, double) #1 Simplify libcall (part of instcombine) will turn the above into: define arm_aapcs_vfpcc double @t(double %x) #0 { entry: %__exp10 = call double @__exp10(double %x) #1 ret double %__exp10 } declare double @__exp10(double) The pre-instcombine code works because calls to LLVM builtins are special. Instruction selection will chose the right calling convention for the call. However, the code after instcombine is wrong. The call to __exp10 will use the C calling convention. I can think of 3 options to fix this. 1. Make "C" calling convention just work since the target should know what CC is being used. This doesn't work because each function can use different CC with the "pcs" attribute. 2. Have Clang add the right CC keyword on the calls to LLVM builtin. This will work but it doesn't match the LLVM IR specification which states these are "Standard C Library Intrinsics". 3. Fix simplify libcall so the resulting calls to the C routines will have the proper CC keyword. e.g. %__exp10 = call arm_aapcs_vfpcc double @__exp10(double %x) #1 This works and is the solution I implemented here. Both solutions #2 and #3 would work. After carefully considering the pros and cons, I decided to implement #3 for the following reasons. 1. It doesn't change the "spec" of the intrinsics. 2. It's a self-contained fix. There are a couple of potential downsides. 1. There could be other places in the optimizer that is broken in the same way that's not addressed by this. 2. There could be other calling conventions that need to be propagated by simplify-libcall that's not handled. But for now, this is the fix that I'm most comfortable with. llvm-svn: 203488
-
Sebastian Pop authored
llvm-svn: 203486
-
Eli Bendersky authored
[forgot to 'svn add' before committing r203483] llvm-svn: 203485
-
Sasa Stankovic authored
* Add masking instructions before loads and stores (in MC layer). * Add masking instructions after SP changes (in MC layer). * Forbid loads, stores and SP changes in delay slots (in MI layer). Differential Revision: http://llvm-reviews.chandlerc.com/D2904 llvm-svn: 203484
-
Eli Bendersky authored
NVPTX, like the other backends, relies on generic symbol name sanitizing done by MCSymbol. However, the ptxas assembler is more stringent and disallows some additional characters in symbol names. See PR19099 for more details. llvm-svn: 203483
-
Tim Northover authored
Patch by Manuel Jacob. llvm-svn: 203482
-
Tim Northover authored
There's now a normal UI for that, apparently. Patch by Manuel Jacob. llvm-svn: 203481
-
Adam Nemet authored
llvm-svn: 203472
-
Rafael Espindola authored
This will replace the now badly named CLANG_IS_PRODUCTION. llvm-svn: 203471
-
Reed Kotler authored
llvm-svn: 203469
-
JF Bastien authored
llvm-svn: 203468
-
Benjamin Kramer authored
No functionality change. llvm-svn: 203465
-
Daniel Sanders authored
Summary: This is a white lie to workaround a widespread bug in the -mfp64 implementation. The problem is that none of the 32-bit fpu ops mention the fact that they clobber the upper 32-bits of the 64-bit FPR. This allows MFHC1 to be scheduled on the wrong side of most 32-bit FPU ops. Fixing that requires a major overhaul of the FPU implementation which can't be done right now due to time constraints. MFHC1 is one of two affected instructions. These instructions are the only FPU instructions that don't read or write the lower 32-bits. We therefore pretend that it reads the bottom 32-bits to artificially create a dependency and prevent the scheduler changing the behaviour of the code. The other instruction is MTHC1 which will be fixed once I've have found a failing test case for it. The testcase is test-suite/SingleSource/UnitTests/Vector/simple.c when given TARGET_CFLAGS="-mips32r2 -mfp64 -mmsa". Reviewers: jacksprat, matheusalmeida Reviewed By: jacksprat Differential Revision: http://llvm-reviews.chandlerc.com/D2966 llvm-svn: 203464
-
Aaron Ballman authored
Removing llvm::distance and llvm::copy for iterator_range based on post-commit review feedback. Adding an explicit range-based constructor to SmallVector, which supersedes the llvm::copy functionality. llvm-svn: 203460
-
Matheus Almeida authored
llvm-svn: 203459
-
Tim Northover authored
The function was making too many assumptions about its input: 1. The NEON_VDUP optimisation was far too aggressive, assuming (I think) that the input would always be BUILD_VECTOR. 2. We were treating most unknown concats as legal (by returning Op rather than SDValue()). I think only concats of pairs of vectors are actually legal. http://llvm.org/PR19094 llvm-svn: 203450
-
Chandler Carruth authored
as well. I don't see any particular need but it imposes no cost to support it and it makes the API cleaner. llvm-svn: 203448
-
Chandler Carruth authored
now that there is essentially no cost to doing so. Yay C++11. llvm-svn: 203447
-
Craig Topper authored
llvm-svn: 203444
-
Craig Topper authored
llvm-svn: 203442
-
Chandler Carruth authored
and caught by the MSan bootstrap build bot. This should hopefully get the bot green at long last. llvm-svn: 203441
-
Craig Topper authored
llvm-svn: 203440
-
Craig Topper authored
llvm-svn: 203439
-
Chandler Carruth authored
commit. Sorry for the churn, just trying to keep it out of any functionality changed. llvm-svn: 203438
-
Chandler Carruth authored
the stack of the analysis group because they are all immutable passes. This is made clear by Craig's recent work to use override systematically -- we weren't overriding anything for 'finalizePass' because there is no such thing. This is kind of a lame restriction on the API -- we can no longer push and pop things, we just set up the stack and run. However, I'm not invested in building some better solution on top of the existing (terrifying) immutable pass and legacy pass manager. llvm-svn: 203437
-
NAKAMURA Takumi authored
- Use constructor instead of initializer list. - Disable ManyUnusedBits for now. llvm-svn: 203436
-
Chandler Carruth authored
llvm-svn: 203435
-
Chandler Carruth authored
lines under 80-columns, etc. llvm-svn: 203434
-
Craig Topper authored
llvm-svn: 203433
-
Chandler Carruth authored
clang-format, but with some modifications by me where it got things wrong or got confused. llvm-svn: 203432
-
Chandler Carruth authored
constructors from the classes which only have a single reference member to many other places. This resulted in them copying their single member instead of moving. =/ Fix this. There's really not a useful test to add sadly because these move constructors are only called when something deep inside some standard library implementation *needs* to move them. Many of the types aren't even user-impacting types. Or, the objects are copyable anyways and so the result was merely a performance problem rather than a correctness problem. Anyways, thanks for the review. And this is a great example of why I wish I colud have the compiler write these for me. llvm-svn: 203431
-
David Majnemer authored
This is fallout from r203429. llvm-svn: 203430
-
David Majnemer authored
Split by comma once instead of multiple times. Moving this upfront makes the rest of the code considerably simpler. No functional change. llvm-svn: 203429
-
Chandler Carruth authored
class that might (at some point) need them. llvm-svn: 203428
-
Chandler Carruth authored
members as being te workaround MSVC. llvm-svn: 203427
-
Chandler Carruth authored
synthesize a move constructor. Thus, for any types where move semantics are important (yea, that's essentially every type...) you must explicitly define the special members. Do so systematically throughout the pass manager as the core of the design relies heavily on move semantics. This will hopefully fix the build with MSVC 2013. We still don't know why MSVC 2012 accepted this code, but it almost certainly wasn't doing the right thing. I've also added explicit to a few single-argument constructors spotted in passing. llvm-svn: 203426
-
Venkatraman Govindaraju authored
llvm-svn: 203424
-