| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
subobject. Previously, we could only properly bind to a base class
subobject while extending the lifetime of the complete object (of a
derived type); for non-static data member subobjects, we could memcpy
(!) the result and bind to that, which is rather broken.
Now, we pull apart the expression that we're binding to, to figure out
which subobject we're accessing, then construct the temporary object
(adding a destruction if needed) and, finally, dig out the subobject
we actually meant to access.
This fixes yet another instance where we were memcpy'ing rather than
doing the right thing. However, note the FIXME in references.cpp:
there's more work to be done for binding to subobjects, since the AST
is incorrectly modeling some member accesses in base classes as
lvalues when they are really rvalues.
llvm-svn: 104219
|
| |
|
|
| |
llvm-svn: 104218
|
| |
|
|
|
|
| |
<rdar://problem/7995494>.
llvm-svn: 104217
|
| |
|
|
|
|
|
|
|
| |
pipeline stall. It's useful for targets like ARM cortex-a8. NEON has a lot
of long latency instructions so a strict register pressure reduction
scheduler does not work well.
Early experiments show this speeds up some NEON loops by over 30%.
llvm-svn: 104216
|
| |
|
|
|
|
|
|
|
| |
class type (that uses a return slot), pass the return slot to the
callee directly rather than allocating new storage and trying to copy
the object. This appears to have been the cause of the remaining two
Boost.Interprocess failures.
llvm-svn: 104215
|
| |
|
|
| |
llvm-svn: 104209
|
| |
|
|
|
|
| |
SourceManager::isFromMainFile()).
llvm-svn: 104208
|
| |
|
|
| |
llvm-svn: 104207
|
| |
|
|
|
|
|
|
|
|
| |
instance variables:
- Use isRecordType() rather than isa<RecordType>(), so that we see
through typedefs in ivar types.
- Mark the destructor as referenced
- Perform C++ access control on the destructor
llvm-svn: 104206
|
| |
|
|
|
|
| |
<rdar://problem/8007063>.
llvm-svn: 104205
|
| |
|
|
| |
llvm-svn: 104204
|
| |
|
|
|
|
|
| |
doesn't have a register operand. Also, use I instead of PSI, for
consistency with mfence and lfence.
llvm-svn: 104203
|
| |
|
|
|
|
| |
(the codegen works here, too, but that's annoying to test without execution)
llvm-svn: 104202
|
| |
|
|
| |
llvm-svn: 104201
|
| |
|
|
| |
llvm-svn: 104197
|
| |
|
|
| |
llvm-svn: 104196
|
| |
|
|
|
|
| |
c++'03 code and variadic support "needs work".
llvm-svn: 104195
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
smallvector
instead of new[]'d. This greatly reduces the number of new[]'s, and guess what,
they were all leaked.
This adds a fixme in this hunk:
unsigned NumPackArgs = NumFlatArgs - PackBeginIndex;
+ // FIXME: NumPackArgs shouldn't be negative here???
if (NumPackArgs)
- PackArgs = &FlatArgs[PackBeginIndex];
+ PackArgs = FlatArgs.data()+PackBeginIndex;
where test/SemaTemplate/variadic-class-template-2.cpp is accessing the vector
out of range and NumPackArgs is negative. I assume variadic template args are
completely hosed.
llvm-svn: 104194
|
| |
|
|
|
|
|
| |
be a copy constructor (since it isn't one semantically)
and fix the ownership bits it sets to be correct!
llvm-svn: 104192
|
| |
|
|
|
|
|
| |
"structure" arg lists, the first step to fixing some massive
memory leaks.
llvm-svn: 104191
|
| |
|
|
| |
llvm-svn: 104190
|
| |
|
|
| |
llvm-svn: 104189
|
| |
|
|
|
|
| |
suggested modification.
llvm-svn: 104188
|
| |
|
|
|
|
|
|
| |
the addressing modes don't make this trivially easy. This allows
it to avoid falling into the less precise heuristics in more
cases.
llvm-svn: 104186
|
| |
|
|
|
|
|
| |
test/Codegen/ARM/reg_sequence.ll but it doesn't affect the generated code
because the coalescer cleans it up. Radar 7998853.
llvm-svn: 104185
|
| |
|
|
|
|
|
|
|
|
| |
create a temporary copy of both the "true" and "false" results. Fixes
the Boost.Interprocess failures.
Daniel did all the hard work of tracking down the issue, I get to type
up the trivial fix for this horrible miscompile.
llvm-svn: 104184
|
| |
|
|
| |
llvm-svn: 104183
|
| |
|
|
| |
llvm-svn: 104182
|
| |
|
|
| |
llvm-svn: 104176
|
| |
|
|
| |
llvm-svn: 104175
|
| |
|
|
|
|
| |
more than one dbg_value instruction. rdar://7759363
llvm-svn: 104174
|
| |
|
|
| |
llvm-svn: 104173
|
| |
|
|
| |
llvm-svn: 104172
|
| |
|
|
|
|
| |
in the debugger.
llvm-svn: 104171
|
| |
|
|
| |
llvm-svn: 104169
|
| |
|
|
|
|
| |
object variables and functions returning such objects.
llvm-svn: 104168
|
| |
|
|
|
|
|
|
|
|
| |
A partial redef now triggers a reload if required. Also don't add
<imp-def,dead> operands for physical superregisters.
Kill flags are still treated as full register kills, and <imp-use,kill> operands
are added for physical superregisters as before.
llvm-svn: 104167
|
| |
|
|
| |
llvm-svn: 104165
|
| |
|
|
| |
llvm-svn: 104163
|
| |
|
|
|
|
|
| |
occuring on..." which breaks some Objective-C code. Working on getting a test
case...
llvm-svn: 104150
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
partial redefines.
We are going to treat a partial redefine of a virtual register as a
read-modify-write:
%reg1024:6 = OP
Unless the register is fully clobbered:
%reg1024:6 = OP, %reg1024<imp-def>
MachineInstr::readsVirtualRegister() knows the difference. The first case is a
read, the second isn't.
llvm-svn: 104149
|
| |
|
|
| |
llvm-svn: 104148
|
| |
|
|
|
|
| |
TargetMachine.h and put it in its own namespace.
llvm-svn: 104147
|
| |
|
|
|
|
|
|
| |
lowering REG_SEQUENCE instructions.
Insert copies for REG_SEQUENCE sources not killed to avoid breaking later passes.
llvm-svn: 104146
|
| |
|
|
| |
llvm-svn: 104145
|
| |
|
|
| |
llvm-svn: 104143
|
| |
|
|
| |
llvm-svn: 104142
|
| |
|
|
|
|
|
|
| |
need to be promoted. The BUILD_VECTOR and EXTRACT_VECTOR_ELT nodes generated
here already allow the promoted type to be used without further changes, so
just do the promotion. This fixes part of pr7167.
llvm-svn: 104141
|
| |
|
|
| |
llvm-svn: 104140
|
| |
|
|
|
|
|
| |
some seriously non-linear performance with deeply nested template
instantiations, as shown in PR6998.
llvm-svn: 104139
|