|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| | 
| 
| 
| 
| 
| | equivalence.
llvm-svn: 55694 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | be folded. Instead, fail to fold the entire vector.
We could also return a vector with some elements folded and some not. If anyone
thinks that's a better approach, please speak up!
llvm-svn: 55689 | 
| | 
| 
| 
| 
| 
| | infinite recursion.  part of PR2529
llvm-svn: 53383 | 
| | 
| 
| 
| 
| 
| | it for PR2529
llvm-svn: 53380 | 
| | 
| 
| 
| | llvm-svn: 53243 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | 1) evaluate [v]fcmp true/false with undefs to true or false instead
   of undef.
2) fix vector comparisons with undef to return a vector result instead 
   of i1
3) fix vector comparisons with evaluatable results to return vector
   true/false instead of i1 true/false (PR2529)
llvm-svn: 53220 | 
| | 
| 
| 
| | llvm-svn: 51889 | 
| | 
| 
| 
| | llvm-svn: 51223 | 
| | 
| 
| 
| | llvm-svn: 51217 | 
| | 
| 
| 
| | llvm-svn: 51216 | 
| | 
| 
| 
| 
| 
| | moving toward making structs and arrays first-class types.
llvm-svn: 51157 | 
| | 
| 
| 
| | llvm-svn: 50943 | 
| | 
| 
| 
| | llvm-svn: 49999 | 
| | 
| 
| 
| | llvm-svn: 49995 | 
| | 
| 
| 
| 
| 
| | long doubles.
llvm-svn: 49976 | 
| | 
| 
| 
| | llvm-svn: 49967 | 
| | 
| 
| 
| 
| 
| 
| | a few new cases( see Integer/a1.ll), but not anything that
would happen in practice.
llvm-svn: 49965 | 
| | 
| 
| 
| | llvm-svn: 49964 | 
| | 
| 
| 
| | llvm-svn: 48971 | 
| | 
| 
| 
| 
| 
| | transformed to undef. But this is such a common idiom (misuse) we are going to handle it.
llvm-svn: 48792 | 
| | 
| 
| 
| | llvm-svn: 47744 | 
| | 
| 
| 
| 
| 
| | annoying warnings.
llvm-svn: 47367 | 
| | 
| 
| 
| | llvm-svn: 47314 | 
| | 
| 
| 
| | llvm-svn: 45418 | 
| | 
| 
| 
| 
| 
| | of PointerType::get() has become PointerType::getUnqual(), which returns a pointer in the generic address space. The new prototype of PointerType::get() requires both a type and an address space.
llvm-svn: 45082 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | This allows us to compile:
#include <emmintrin.h>
typedef __m128i VSInt16;
typedef short vSInt16 __attribute__ ((__vector_size__ (16)));
VSInt16 t3() {
  return (VSInt16)((vSInt16)_mm_set1_epi16(6518));
}
into:
_t3:
	movaps	LCPI1_0, %xmm0
	ret
instead of:
_t3:
	movl	$6518, %eax
	movd	%eax, %xmm0
	pextrw	$0, %xmm0, %eax
	xorps	%xmm0, %xmm0
	pinsrw	$0, %eax, %xmm0
	punpcklwd	%xmm0, %xmm0
	pshufd	$0, %xmm0, %xmm0
	ret
llvm-svn: 44856 | 
| | 
| 
| 
| | llvm-svn: 44850 | 
| | 
| 
| 
| | llvm-svn: 44849 | 
| | 
| 
| 
| 
| 
| 
| 
| | Reimplement the xform in Analysis/ConstantFolding.cpp where we can use
targetdata to validate that it is safe.  While I'm in there, fix some const
correctness issues and generalize the interface to the "operand folder".
llvm-svn: 44817 | 
| | 
| 
| 
| | llvm-svn: 44204 | 
| | 
| 
| 
| 
| 
| 
| | by r43510. Gracefully handle constants with vector type that aren't
ConstantVector or ConstantAggregateZero.
llvm-svn: 43579 | 
| | 
| 
| 
| | llvm-svn: 43510 | 
| | 
| 
| 
| 
| 
| 
| | Remove the assumption that this will happen from
various places.
llvm-svn: 43053 | 
| | 
| 
| 
| | llvm-svn: 42979 | 
| | 
| 
| 
| 
| 
| | long double.
llvm-svn: 42958 | 
| | 
| 
| 
| 
| 
| 
| 
| | input.  APInt unfortunately zero-extends signed integers, so Dale
modified the function to expect zero-extended input.  Make this
assumption explicit in the function name.
llvm-svn: 42732 | 
| | 
| 
| 
| 
| 
| 
| 
| | use APFloat for int-to-float/double; use
round-to-nearest for these (implementation-defined,
seems to match gcc).
llvm-svn: 42484 | 
| | 
| 
| 
| | llvm-svn: 42329 | 
| | 
| 
| 
| 
| 
| | cases with undefined behavior.
llvm-svn: 42328 | 
| | 
| 
| 
| 
| 
| | Fixes PR1698.
llvm-svn: 42273 | 
| | 
| 
| 
| 
| 
| | -1. / -0.
llvm-svn: 42254 | 
| | 
| 
| 
| | llvm-svn: 42165 | 
| | 
| 
| 
| | llvm-svn: 42133 | 
| | 
| 
| 
| 
| 
| 
| | fold that were missed in the fix for PR1646.  Probably
this null/not-null logic should be factorized somewhere.
llvm-svn: 42131 | 
| | 
| 
| 
| 
| 
| 
| | Next round of x87 long double stuff.
Getting close now, basically works.
llvm-svn: 41875 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | access to bits).  Use them in place of float and
double interfaces where appropriate.
First bits of x86 long double constants handling 
(untested, probably does not work).
llvm-svn: 41858 | 
| | 
| 
| 
| | llvm-svn: 41818 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | Use APFloat in UpgradeParser and AsmParser.
Change all references to ConstantFP to use the
APFloat interface rather than double.  Remove
the ConstantFP double interfaces.
Use APFloat functions for constant folding arithmetic
and comparisons.
(There are still way too many places APFloat is
just a wrapper around host float/double, but we're
getting there.)
llvm-svn: 41747 | 
| | 
| 
| 
| 
| 
| | GLIBCXX_DEBUG issues.
llvm-svn: 41697 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | Into: inttoptr (i64 0 to i8*)  -> null
This occurs in the example in PR1602.  With this fixed, we now compile
the example in PR1602 into fully "devirtualized" code:
define void @_Z1g1S(%struct.S* noalias  %s) {
entry:        %tmp131415 = getelementptr %struct.S* %s, i32 0, i32 0          ; <i32 (...)***> [#uses=1]        %tmp16 = load i32 (...)*** %tmp131415, align 4          ; <i32 (...)**> [#uses=1]
        %tmp26277 = load i32 (...)** %tmp16             ; <i32 (...)*> [#uses=1]
        %tmp2829 = bitcast i32 (...)* %tmp26277 to void (%struct.S*)*           ; <void (%struct.S*)*> [#uses=1]
        tail call void %tmp2829( %struct.S* %s )
        ret void
}
This still has the vtable dispatch (as required) but does not have any pointer
to method cruft left.
llvm-svn: 41046 |