[llvm-commits] [llvm-gcc-4.2] r46004 - in /llvm-gcc-4.2/trunk/gcc: config/i386/i386.c config/i386/llvm-i386-target.h llvm-abi.h

2008-01-15 Thread Evan Cheng
Author: evancheng
Date: Tue Jan 15 02:18:25 2008
New Revision: 46004

URL: http://llvm.org/viewvc/llvm-project?rev=46004&view=rev
Log:
Make use of existing gcc facility to determine if an aggregate argument should 
be passed ByVal in x86-64 mode.

Modified:
llvm-gcc-4.2/trunk/gcc/config/i386/i386.c
llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h
llvm-gcc-4.2/trunk/gcc/llvm-abi.h

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/i386.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/i386.c?rev=46004&r1=46003&r2=46004&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/config/i386/i386.c (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/i386.c Tue Jan 15 02:18:25 2008
@@ -21524,4 +21524,18 @@
   return DW_EH_PE_absptr;
 }
 
+
+/* APPLE LOCAL begin LLVM */
+
+/* Target hook for llvm-abi.h. It returns true if an aggregate of the
+   specified type should be passed in memory. This is only called for
+   x86-64. */
+int llvm_x86_64_should_pass_aggregate_in_memory(tree type) {
+  int needed_intregs, needed_sseregs;
+  enum machine_mode mode = type_natural_mode (type);
+  return !examine_argument(mode, type, 1, &needed_intregs, &needed_sseregs);
+}
+
+/* APPLE LOCAL end LLVM */
+
 #include "gt-i386.h"

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h?rev=46004&r1=46003&r2=46004&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Tue Jan 15 02:18:25 
2008
@@ -62,8 +62,11 @@
 }   \
   }
 
+extern int llvm_x86_64_should_pass_aggregate_in_memory(tree);
+
 #define LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(X)  \
-  (!TARGET_64BIT)
+  ((!TARGET_64BIT)  \
+  ? true : llvm_x86_64_should_pass_aggregate_in_memory(X))
 
 /* LLVM LOCAL end (ENTIRE FILE!)  */
 

Modified: llvm-gcc-4.2/trunk/gcc/llvm-abi.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-abi.h?rev=46004&r1=46003&r2=46004&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/llvm-abi.h (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-abi.h Tue Jan 15 02:18:25 2008
@@ -131,7 +131,7 @@
 #endif
 
 // LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR - Return true if this aggregate
-// value should be passed by reference by passing its address with the byval
+// value should be passed by value, i.e. passing its address with the byval
 // attribute bit set. The default is false.
 #ifndef LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(X)
 #define LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(X) \


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm-gcc-4.2] r46004 - in /llvm-gcc-4.2/trunk/gcc: config/i386/i386.c config/i386/llvm-i386-target.h llvm-abi.h

2008-01-15 Thread Chris Lattner
> URL: http://llvm.org/viewvc/llvm-project?rev=46004&view=rev
> Log:
> Make use of existing gcc facility to determine if an aggregate  
> argument should be passed ByVal in x86-64 mode.

Nice.

> +/* Target hook for llvm-abi.h. It returns true if an aggregate of the
> +   specified type should be passed in memory. This is only called for
> +   x86-64. */
> +int llvm_x86_64_should_pass_aggregate_in_memory(tree type) {
> +  int needed_intregs, needed_sseregs;
> +  enum machine_mode mode = type_natural_mode (type);
> +  return !examine_argument(mode, type, 1, &needed_intregs,  
> &needed_sseregs);

Please document what this is doing:

/* if examine_argument says that this arg takes 0 registers, it is  
passed in memory, pass with byval. */

or something.

> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ==
> --- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h (original)
> +++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Tue Jan 15  
> 02:18:25 2008
> @@ -62,8 +62,11 @@
> }   \
>   }
>
> +extern int llvm_x86_64_should_pass_aggregate_in_memory(tree);
> +
> #define LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(X)  \
> -  (!TARGET_64BIT)
> +  ((!TARGET_64BIT)  \
> +  ? true : llvm_x86_64_should_pass_aggregate_in_memory(X))

How about: (!TARGET_64BIT ||  
llvm_x86_64_should_pass_aggregate_in_memory(X))

-Chris
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] Makefile.rules patch: remove redundant -I compiler flags

2008-01-15 Thread Sam Bishop
The attached patch makes VERBOSE builds easier to wade through.  It's likely
to also permute the PROJ_* and LLVM_* includes, but I don't think that
should matter.  I've done a full-tree compile and everything seems to be
working.

Thanks,
Sam Bishop


 ***  Before  ***
[EMAIL PROTECTED] make VERBOSE=1
llvm[0]: Compiling CommandLine.cpp for Debug build
if g++ -I/u/sbishop/llvm/lib/Support -I/u/sbishop/llvm/lib/Support
-I/u/sbishop/llvm/include -I/u/sbishop/llvm/include
-I/u/sbishop/llvm/include -I/u/sbishop/llvm/include ...

 ***  After   ***
[EMAIL PROTECTED] make VERBOSE=1
llvm[0]: Compiling CommandLine.cpp for Debug build
if g++ -I/u/sbishop/llvm/include -I/u/sbishop/llvm/lib/Support/include ...

Makefile.rules.patch
Description: Binary data
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46006 - /llvm/trunk/test/FrontendAda/placeholder.adb

2008-01-15 Thread Duncan Sands
Author: baldrick
Date: Tue Jan 15 13:55:41 2008
New Revision: 46006

URL: http://llvm.org/viewvc/llvm-project?rev=46006&view=rev
Log:
Testcase for gimplify_expr crash caused by an
unexpected placeholder_expr.

Added:
llvm/trunk/test/FrontendAda/placeholder.adb

Added: llvm/trunk/test/FrontendAda/placeholder.adb
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendAda/placeholder.adb?rev=46006&view=auto

==
--- llvm/trunk/test/FrontendAda/placeholder.adb (added)
+++ llvm/trunk/test/FrontendAda/placeholder.adb Tue Jan 15 13:55:41 2008
@@ -0,0 +1,12 @@
+-- RUN: %llvmgcc -c %s
+procedure Placeholder is
+   subtype Bounded is Integer range 1 .. 5;
+   type Vector is array (Bounded range <>) of Integer;
+   type Interval (Length : Bounded := 1) is record
+  Points : Vector (1 .. Length);
+   end record;
+   An_Interval : Interval := (Length => 1, Points => (1 => 1));
+   generic The_Interval : Interval; package R is end;
+   package body R is end;
+   package S is new R (An_Interval);
+begin null; end;


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46007 - /llvm/trunk/include/llvm/Support/StringPool.h

2008-01-15 Thread Gordon Henriksen
Author: gordon
Date: Tue Jan 15 14:02:11 2008
New Revision: 46007

URL: http://llvm.org/viewvc/llvm-project?rev=46007&view=rev
Log:
Fix a memory correctness error noticed by valgrind (harmless in practice).

Thanks to Duncan Sands for noticing it.

Modified:
llvm/trunk/include/llvm/Support/StringPool.h

Modified: llvm/trunk/include/llvm/Support/StringPool.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/StringPool.h?rev=46007&r1=46006&r2=46007&view=diff

==
--- llvm/trunk/include/llvm/Support/StringPool.h (original)
+++ llvm/trunk/include/llvm/Support/StringPool.h Tue Jan 15 14:02:11 2008
@@ -110,7 +110,7 @@
 return;
   if (--S->getValue().Refcount == 0) {
 S->getValue().Pool->InternTable.remove(S);
-delete S;
+S->Destroy();
   }
   S = 0;
 }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r46008 - /llvm-gcc-4.2/trunk/gcc/llvm-abi.h

2008-01-15 Thread Duncan Sands
Author: baldrick
Date: Tue Jan 15 15:03:51 2008
New Revision: 46008

URL: http://llvm.org/viewvc/llvm-project?rev=46008&view=rev
Log:
Fix warning: extra tokens at end of #ifndef directive

Modified:
llvm-gcc-4.2/trunk/gcc/llvm-abi.h

Modified: llvm-gcc-4.2/trunk/gcc/llvm-abi.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-abi.h?rev=46008&r1=46007&r2=46008&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/llvm-abi.h (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-abi.h Tue Jan 15 15:03:51 2008
@@ -133,7 +133,7 @@
 // LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR - Return true if this aggregate
 // value should be passed by value, i.e. passing its address with the byval
 // attribute bit set. The default is false.
-#ifndef LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(X)
+#ifndef LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR
 #define LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(X) \
 false
 #endif


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46009 - /llvm/trunk/lib/VMCore/AsmWriter.cpp

2008-01-15 Thread Bill Wendling
Author: void
Date: Tue Jan 15 15:16:32 2008
New Revision: 46009

URL: http://llvm.org/viewvc/llvm-project?rev=46009&view=rev
Log:
Reformatted. It was confusing the other way. No functionality change.

Modified:
llvm/trunk/lib/VMCore/AsmWriter.cpp

Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AsmWriter.cpp?rev=46009&r1=46008&r2=46009&view=diff

==
--- llvm/trunk/lib/VMCore/AsmWriter.cpp (original)
+++ llvm/trunk/lib/VMCore/AsmWriter.cpp Tue Jan 15 15:16:32 2008
@@ -921,12 +921,13 @@
 void AssemblyWriter::printGlobal(const GlobalVariable *GV) {
   if (GV->hasName()) Out << getLLVMName(GV->getName(), GlobalPrefix) << " = ";
 
-  if (!GV->hasInitializer())
+  if (!GV->hasInitializer()) {
 switch (GV->getLinkage()) {
  case GlobalValue::DLLImportLinkage:   Out << "dllimport "; break;
  case GlobalValue::ExternalWeakLinkage: Out << "extern_weak "; break;
  default: Out << "external "; break;
-} else {
+}
+  } else {
 switch (GV->getLinkage()) {
 case GlobalValue::InternalLinkage: Out << "internal "; break;
 case GlobalValue::LinkOnceLinkage: Out << "linkonce "; break;


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r46010 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 15:35:53 2008
New Revision: 46010

URL: http://llvm.org/viewvc/llvm-project?rev=46010&view=rev
Log:
Add support for builtin_trap, which was basically just broken before.

Modified:
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=46010&r1=46009&r2=46010&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Tue Jan 15 15:35:53 2008
@@ -4199,11 +4199,18 @@
   }
   case BUILT_IN_FLT_ROUNDS: {
 Result = Builder.CreateCall(Intrinsic::getDeclaration(TheModule,
-  
Intrinsic::flt_rounds),
+ 
Intrinsic::flt_rounds),
 "tmp");
 Result = BitCastToType(Result, ConvertType(TREE_TYPE(exp)));
 return true;
   }
+  case BUILT_IN_TRAP:
+Builder.CreateCall(Intrinsic::getDeclaration(TheModule, Intrinsic::trap));
+// Emit an explicit unreachable instruction.
+Builder.CreateUnreachable();
+EmitBlock(new BasicBlock(""));
+return true;
+  
 #if 1  // FIXME: Should handle these GCC extensions eventually.
 case BUILT_IN_APPLY_ARGS:
 case BUILT_IN_APPLY:
@@ -4218,7 +4225,6 @@
 case BUILT_IN_SETJMP_RECEIVER:
 case BUILT_IN_LONGJMP:
 case BUILT_IN_UPDATE_SETJMP_BUF:
-case BUILT_IN_TRAP:
 
 // FIXME: HACK: Just ignore these.
 {


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] Fix for PR1798 (ScalarEvolution)

2008-01-15 Thread Wojciech Matyjewicz
The attached patch should fix the aforementioned bug. It passes DejaGnu
testsuite. Nick also checked that it passes llvm-test and llvm-gcc
bootstrap (thanks!).

The patch:
1) changes SCEVSDivExpr into SCEVUDivExpr,
2) replaces PartialFact() function with BinomialCoefficient(); the
computations in BinomialCoefficient() are performed with the apprioprate
bitwidth necessary to avoid overflow.

The short explanation why the patch should be correct is contained in
the comments. The longer can be found in the bugzilla discussion:
http://llvm.org/bugs/show_bug.cgi?id=1798.

However, there is one problem. The fix needs support for integers of
arbitrary bitwitdth to work in every possible case. Here is a short
explanation why:
To evaluate a chrec of length K at a given iteration we need, in
general, to generate LLVM code performing accurate multiplication of K
numbers. Suppose, W is their bitwidth. Then, multiplication need to use
K*W bits, what can potentially be an arbitrary number.

I can see two ways what we can do now:
1) wait for the backend support,
2) make the patch unoptimal by using the more bits than needed to
perform the multiplication (the minimum power of 2 greater or equal to K*W)

What do you think?

-Wojtek
Index: test/Analysis/ScalarEvolution/2007-11-14-SignedAddRec.ll
===
--- test/Analysis/ScalarEvolution/2007-11-14-SignedAddRec.ll(revision 46007)
+++ test/Analysis/ScalarEvolution/2007-11-14-SignedAddRec.ll(working copy)
@@ -1,6 +1,5 @@
 ; RUN: llvm-as < %s | opt -indvars | llvm-dis | grep printd | grep 1206807378
 ; PR1798
-; XFAIL: *
 
 declare void @printd(i32)
 
Index: include/llvm/Analysis/ScalarEvolutionExpander.h
===
--- include/llvm/Analysis/ScalarEvolutionExpander.h (revision 46007)
+++ include/llvm/Analysis/ScalarEvolutionExpander.h (working copy)
@@ -126,10 +126,10 @@
 
 Value *visitMulExpr(SCEVMulExpr *S);
 
-Value *visitSDivExpr(SCEVSDivExpr *S) {
+Value *visitUDivExpr(SCEVUDivExpr *S) {
   Value *LHS = expand(S->getLHS());
   Value *RHS = expand(S->getRHS());
-  return InsertBinop(Instruction::SDiv, LHS, RHS, InsertPt);
+  return InsertBinop(Instruction::UDiv, LHS, RHS, InsertPt);
 }
 
 Value *visitAddRecExpr(SCEVAddRecExpr *S);
Index: include/llvm/Analysis/ScalarEvolution.h
===
--- include/llvm/Analysis/ScalarEvolution.h (revision 46007)
+++ include/llvm/Analysis/ScalarEvolution.h (working copy)
@@ -225,7 +225,7 @@
   Ops.push_back(RHS);
   return getMulExpr(Ops);
 }
-SCEVHandle getSDivExpr(const SCEVHandle &LHS, const SCEVHandle &RHS);
+SCEVHandle getUDivExpr(const SCEVHandle &LHS, const SCEVHandle &RHS);
 SCEVHandle getAddRecExpr(const SCEVHandle &Start, const SCEVHandle &Step,
  const Loop *L);
 SCEVHandle getAddRecExpr(std::vector &Operands,
Index: include/llvm/Analysis/ScalarEvolutionExpressions.h
===
--- include/llvm/Analysis/ScalarEvolutionExpressions.h  (revision 46007)
+++ include/llvm/Analysis/ScalarEvolutionExpressions.h  (working copy)
@@ -25,7 +25,7 @@
 // These should be ordered in terms of increasing complexity to make the
 // folders simpler.
 scConstant, scTruncate, scZeroExtend, scSignExtend, scAddExpr, scMulExpr,
-scSDivExpr, scAddRecExpr, scSMaxExpr, scUnknown, scCouldNotCompute
+scUDivExpr, scAddRecExpr, scSMaxExpr, scUnknown, scCouldNotCompute
   };
 
   
//======//
@@ -322,16 +322,16 @@
 
 
   
//======//
-  /// SCEVSDivExpr - This class represents a binary signed division operation.
+  /// SCEVUDivExpr - This class represents a binary unsigned division 
operation.
   ///
-  class SCEVSDivExpr : public SCEV {
+  class SCEVUDivExpr : public SCEV {
 friend class ScalarEvolution;
 
 SCEVHandle LHS, RHS;
-SCEVSDivExpr(const SCEVHandle &lhs, const SCEVHandle &rhs)
-  : SCEV(scSDivExpr), LHS(lhs), RHS(rhs) {}
+SCEVUDivExpr(const SCEVHandle &lhs, const SCEVHandle &rhs)
+  : SCEV(scUDivExpr), LHS(lhs), RHS(rhs) {}
 
-virtual ~SCEVSDivExpr();
+virtual ~SCEVUDivExpr();
   public:
 const SCEVHandle &getLHS() const { return LHS; }
 const SCEVHandle &getRHS() const { return RHS; }
@@ -353,7 +353,7 @@
   if (L == LHS && R == RHS)
 return this;
   else
-return SE.getSDivExpr(L, R);
+return SE.getUDivExpr(L, R);
 }
 
 
@@ -363,9 +363,9 @@
 void print(std::ostream *OS) const { if (OS) print(*OS); }
 
 /// Methods for support type inquiry through isa, cast, and dyn_cast:
-static inline bool classof(const SCEVSDivExpr *S) { return true; }
+static inline bool classof(con

[llvm-commits] [llvm-gcc-4.0] r46011 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 15:38:04 2008
New Revision: 46011

URL: http://llvm.org/viewvc/llvm-project?rev=46011&view=rev
Log:
implement __builtin_trap, which was previously just broken.

Modified:
llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=46011&r1=46010&r2=46011&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Tue Jan 15 15:38:04 2008
@@ -4644,6 +4644,12 @@
 Args.begin(), Args.end());
 return true;
   }
+   case BUILT_IN_TRAP:
+ Builder.CreateCall(Intrinsic::getDeclaration(TheModule, Intrinsic::trap));
+ // Emit an explicit unreachable instruction.
+ Builder.CreateUnreachable();
+ EmitBlock(new BasicBlock(""));
+ return true;
 
 #if 1  // FIXME: Should handle these GCC extensions eventually.
 case BUILT_IN_APPLY_ARGS:
@@ -4657,7 +4663,6 @@
 case BUILT_IN_SETJMP:
 case BUILT_IN_LONGJMP:
 case BUILT_IN_UPDATE_SETJMP_BUF:
-case BUILT_IN_TRAP:
 
 // FIXME: HACK: Just ignore these.
 {


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46012 - /llvm/trunk/lib/Target/X86/X86InstrInfo.td

2008-01-15 Thread Anton Korobeynikov
Author: asl
Date: Tue Jan 15 15:40:02 2008
New Revision: 46012

URL: http://llvm.org/viewvc/llvm-project?rev=46012&view=rev
Log:
Fix JIT encoding of trap/ud2 instruction

Modified:
llvm/trunk/lib/Target/X86/X86InstrInfo.td

Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=46012&r1=46011&r2=46012&view=diff

==
--- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Tue Jan 15 15:40:02 2008
@@ -490,8 +490,7 @@
 TB;
 
 let isBarrier = 1, hasCtrlDep = 1 in {
-// FIXME: Should use 0x0F0B opcode
-def TRAP: I<0, RawFrm, (outs), (ins), "ud2", [(X86trap)]>;
+def TRAP: I<0x0B, RawFrm, (outs), (ins), "ud2", [(X86trap)]>, TB;
 }
 
 
//===--===//


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46013 - in /llvm/trunk: utils/TableGen/CodeGenDAGPatterns.cpp win32/CodeGen/CodeGen.vcproj win32/TableGen/TableGen.vcproj win32/Target/Target.vcproj win32/Transforms/Transforms.

2008-01-15 Thread Chuck Rose III
Author: cfr
Date: Tue Jan 15 15:43:17 2008
New Revision: 46013

URL: http://llvm.org/viewvc/llvm-project?rev=46013&view=rev
Log:
Add files to windows project files.  Also include  explicitly so 
that vstudio build works

Modified:
llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
llvm/trunk/win32/CodeGen/CodeGen.vcproj
llvm/trunk/win32/TableGen/TableGen.vcproj
llvm/trunk/win32/Target/Target.vcproj
llvm/trunk/win32/Transforms/Transforms.vcproj

Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp?rev=46013&r1=46012&r2=46013&view=diff

==
--- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp (original)
+++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp Tue Jan 15 15:43:17 2008
@@ -18,6 +18,7 @@
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/Streams.h"
 #include 
+#include 
 using namespace llvm;
 
 
//===--===//

Modified: llvm/trunk/win32/CodeGen/CodeGen.vcproj
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/win32/CodeGen/CodeGen.vcproj?rev=46013&r1=46012&r2=46013&view=diff

==
--- llvm/trunk/win32/CodeGen/CodeGen.vcproj (original)
+++ llvm/trunk/win32/CodeGen/CodeGen.vcproj Tue Jan 15 15:43:17 2008
@@ -313,6 +313,10 @@
>


+   
+   

@@ -397,6 +401,10 @@
>


+   
+   

@@ -405,6 +413,10 @@
>


+   
+   

@@ -445,6 +457,10 @@
>


+   
+   


Modified: llvm/trunk/win32/TableGen/TableGen.vcproj
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/win32/TableGen/TableGen.vcproj?rev=46013&r1=46012&r2=46013&view=diff

==
--- llvm/trunk/win32/TableGen/TableGen.vcproj (original)
+++ llvm/trunk/win32/TableGen/TableGen.vcproj Tue Jan 15 15:43:17 2008
@@ -380,6 +380,14 @@
>


+   
+   
+   
+   

@@ -388,6 +396,10 @@
>


+   
+   

@@ -442,6 +454,10 @@
>


+   
+   

@@ -462,6 +478,10 @@
>


+   
+   


Modified: llvm/trunk/win32/Target/Target.vcproj
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/win32/Target/Target.vcproj?rev=46013&r1=46012&r2=46013&view=diff

==
--- llvm/trunk/win32/Target/Target.vcproj (original)
+++ llvm/trunk/win32/Target/Target.vcproj Tue Jan 15 15:43:17 2008
@@ -375,6 +375,10 @@
>


+   
+   


Modified: llvm/trunk/win32/Transforms/Transforms.vcproj
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/win32/Transforms/Transforms.vcproj?rev=46013&r1=46012&r2=46013&view=diff

==
--- llvm/trunk/win32/Transforms/Transforms.vcproj (original)
+++ llvm/trunk/win32/Transforms/Transforms.vcproj Tue Jan 15 15:43:17 2008
@@ -496,10 +496,6 @@
>


-   
-   



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46015 - in /llvm/trunk/lib/Target/X86: X86ISelLowering.cpp X86ISelLowering.h X86InstrInfo.td

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 15:58:22 2008
New Revision: 46015

URL: http://llvm.org/viewvc/llvm-project?rev=46015&view=rev
Log:
no need to expand ISD::TRAP to X86ISD::TRAP, just match ISD::TRAP.

Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/lib/Target/X86/X86ISelLowering.h
llvm/trunk/lib/Target/X86/X86InstrInfo.td

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=46015&r1=46014&r2=46015&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Tue Jan 15 15:58:22 2008
@@ -294,7 +294,7 @@
   
   setOperationAction(ISD::TRAMPOLINE, MVT::Other, Custom);
 
-  setOperationAction(ISD::TRAP, MVT::Other, Custom);
+  setOperationAction(ISD::TRAP, MVT::Other, Legal);
 
   // VASTART needs to be custom lowered to use the VarArgsFrameIndex
   setOperationAction(ISD::VASTART   , MVT::Other, Custom);
@@ -4950,10 +4950,6 @@
   ISD::TRUNCATE : ISD::ZERO_EXTEND), VT, RetVal);
 }
 
-SDOperand X86TargetLowering::LowerTRAP(SDOperand Op, SelectionDAG &DAG) {
-  return DAG.getNode(X86ISD::TRAP, MVT::Other, Op.getOperand(0));
-}
-
 SDOperand X86TargetLowering::LowerCTLZ(SDOperand Op, SelectionDAG &DAG) {
   MVT::ValueType VT = Op.getValueType();
   MVT::ValueType OpVT = VT;
@@ -5058,7 +5054,6 @@
   case ISD::FLT_ROUNDS: return LowerFLT_ROUNDS(Op, DAG);
   case ISD::CTLZ:   return LowerCTLZ(Op, DAG);
   case ISD::CTTZ:   return LowerCTTZ(Op, DAG);
-  case ISD::TRAP:   return LowerTRAP(Op, DAG);
   
   // FIXME: REMOVE THIS WHEN LegalizeDAGTypes lands.
   case ISD::READCYCLECOUNTER:
@@ -5098,7 +5093,6 @@
   case X86ISD::CALL:   return "X86ISD::CALL";
   case X86ISD::TAILCALL:   return "X86ISD::TAILCALL";
   case X86ISD::RDTSC_DAG:  return "X86ISD::RDTSC_DAG";
-  case X86ISD::TRAP:   return "X86ISD::TRAP";
   case X86ISD::CMP:return "X86ISD::CMP";
   case X86ISD::COMI:   return "X86ISD::COMI";
   case X86ISD::UCOMI:  return "X86ISD::UCOMI";

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=46015&r1=46014&r2=46015&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.h (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.h Tue Jan 15 15:58:22 2008
@@ -197,10 +197,7 @@
   TC_RETURN,
 
   // Store FP control world into i16 memory
-  FNSTCW16m,
-
-  // Trapping instruction
-  TRAP
+  FNSTCW16m
 };
   }
 
@@ -487,7 +484,6 @@
 SDOperand LowerEH_RETURN(SDOperand Op, SelectionDAG &DAG);
 SDOperand LowerTRAMPOLINE(SDOperand Op, SelectionDAG &DAG);
 SDOperand LowerFLT_ROUNDS(SDOperand Op, SelectionDAG &DAG);
-SDOperand LowerTRAP(SDOperand Op, SelectionDAG &DAG);
 SDOperand LowerCTLZ(SDOperand Op, SelectionDAG &DAG);
 SDOperand LowerCTTZ(SDOperand Op, SelectionDAG &DAG);
 SDNode *ExpandFP_TO_SINT(SDNode *N, SelectionDAG &DAG);

Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=46015&r1=46014&r2=46015&view=diff

==
--- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Tue Jan 15 15:58:22 2008
@@ -57,8 +57,6 @@
 
 def SDT_X86TCRET : SDTypeProfile<0, 2, [SDTCisPtrTy<0>, SDTCisVT<1, i32>]>;
 
-def SDT_X86TRAP  : SDTypeProfile<0, 0, []>;
-
 def X86bsf : SDNode<"X86ISD::BSF",  SDTIntUnaryOp>;
 def X86bsr : SDNode<"X86ISD::BSR",  SDTIntUnaryOp>;
 def X86shld: SDNode<"X86ISD::SHLD", SDTIntShiftDOp>;
@@ -109,8 +107,9 @@
 def X86tcret : SDNode<"X86ISD::TC_RETURN", SDT_X86TCRET, 
 [SDNPHasChain,  SDNPOptInFlag]>;
 
-def X86trap  : SDNode<"X86ISD::TRAP", SDT_X86TRAP,
-[SDNPHasChain, SDNPOutFlag, SDNPSideEffect]>;
+def SDT_TRAP  : SDTypeProfile<0, 0, []>;
+def trap  : SDNode<"ISD::TRAP", SDT_TRAP,
+   [SDNPHasChain, SDNPOutFlag, SDNPSideEffect]>;
 
 
//===--===//
 // X86 Operand Definitions.
@@ -490,7 +489,7 @@
 TB;
 
 let isBarrier = 1, hasCtrlDep = 1 in {
-def TRAP: I<0x0B, RawFrm, (outs), (ins), "ud2", [(X86trap)]>, TB;
+def TRAP: I<0x0B, RawFrm, (outs), (ins), "ud2", [(trap)]>, TB;
 }
 
 
//===--===//


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinf

[llvm-commits] [llvm] r46014 - in /llvm/trunk/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp TargetLowering.cpp

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 15:58:08 2008
New Revision: 46014

URL: http://llvm.org/viewvc/llvm-project?rev=46014&view=rev
Log:
Add support for targets that have a legal ISD::TRAP.

Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=46014&r1=46013&r2=46014&view=diff

==
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Tue Jan 15 15:58:08 2008
@@ -3734,24 +3734,29 @@
   break;
 }
   }
-   case ISD::TRAP: {
+  case ISD::TRAP: {
 MVT::ValueType VT = Node->getValueType(0);
 switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
 default: assert(0 && "This action not supported for this op yet!");
+case TargetLowering::Legal:
+  Tmp1 = LegalizeOp(Node->getOperand(0));
+  Result = DAG.UpdateNodeOperands(Result, Tmp1);
+  break;
 case TargetLowering::Custom:
   Result = TLI.LowerOperation(Op, DAG);
   if (Result.Val) break;
   // Fall Thru
-case TargetLowering::Legal:
+case TargetLowering::Expand:
   // If this operation is not supported, lower it to 'abort()' call
-  SDOperand Chain = LegalizeOp(Node->getOperand(0));
+  Tmp1 = LegalizeOp(Node->getOperand(0));
   TargetLowering::ArgListTy Args;
   std::pair CallResult =
-TLI.LowerCallTo(Chain, Type::VoidTy, false, false, CallingConv::C, 
false,
+TLI.LowerCallTo(Tmp1, Type::VoidTy, false, false, CallingConv::C, 
false,
 DAG.getExternalSymbol("abort", MVT::Other), Args, DAG);
   Result = CallResult.second;
   break;
 }
+break;
   }
   }
   

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp?rev=46014&r1=46013&r2=46014&view=diff

==
--- llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp Tue Jan 15 15:58:08 
2008
@@ -175,6 +175,9 @@
 setOperationAction(ISD::FGETSIGN, (MVT::ValueType)VT, Expand);
   }
 
+  // Default ISD::TRAP to expand (which turns it into abort).
+  setOperationAction(ISD::TRAP, MVT::Other, Expand);
+
   IsLittleEndian = TD->isLittleEndian();
   UsesGlobalOffsetTable = false;
   ShiftAmountTy = SetCCResultTy = PointerTy = 
getValueType(TD->getIntPtrType());


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46016 - in /llvm/trunk/lib: CodeGen/LiveVariables.cpp CodeGen/PHIElimination.cpp CodeGen/TwoAddressInstructionPass.cpp Target/ARM/ARMInstrInfo.cpp

2008-01-15 Thread Owen Anderson
Author: resistor
Date: Tue Jan 15 16:02:46 2008
New Revision: 46016

URL: http://llvm.org/viewvc/llvm-project?rev=46016&view=rev
Log:
Remove DefInst from LiveVariables::VarInfo.  Use the facilities on 
MachineRegisterInfo instead.

Modified:
llvm/trunk/lib/CodeGen/LiveVariables.cpp
llvm/trunk/lib/CodeGen/PHIElimination.cpp
llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp
llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp

Modified: llvm/trunk/lib/CodeGen/LiveVariables.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveVariables.cpp?rev=46016&r1=46015&r2=46016&view=diff

==
--- llvm/trunk/lib/CodeGen/LiveVariables.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveVariables.cpp Tue Jan 15 16:02:46 2008
@@ -43,11 +43,6 @@
 static RegisterPass X("livevars", "Live Variable Analysis");
 
 void LiveVariables::VarInfo::dump() const {
-  cerr << "Register Defined by: ";
-  if (DefInst) 
-cerr << *DefInst;
-  else
-cerr << "\n";
   cerr << "  Alive in blocks: ";
   for (unsigned i = 0, e = AliveBlocks.size(); i != e; ++i)
 if (AliveBlocks[i]) cerr << i << ", ";
@@ -117,11 +112,13 @@
   return false;
 }
 
-void LiveVariables::MarkVirtRegAliveInBlock(VarInfo &VRInfo,
+void LiveVariables::MarkVirtRegAliveInBlock(unsigned reg,
 MachineBasicBlock *MBB,
 std::vector &WorkList) 
{
   unsigned BBNum = MBB->getNumber();
 
+  VarInfo& VRInfo = getVarInfo(reg);
+  
   // Check to see if this basic block is one of the killing blocks.  If so,
   // remove it...
   for (unsigned i = 0, e = VRInfo.Kills.size(); i != e; ++i)
@@ -129,8 +126,9 @@
   VRInfo.Kills.erase(VRInfo.Kills.begin()+i);  // Erase entry
   break;
 }
-
-  if (MBB == VRInfo.DefInst->getParent()) return;  // Terminate recursion
+  
+  MachineRegisterInfo& MRI = MBB->getParent()->getRegInfo();
+  if (MBB == MRI.getVRegDef(reg)->getParent()) return;  // Terminate recursion
 
   if (VRInfo.AliveBlocks[BBNum])
 return;  // We already know the block is live
@@ -143,24 +141,26 @@
 WorkList.push_back(*PI);
 }
 
-void LiveVariables::MarkVirtRegAliveInBlock(VarInfo &VRInfo,
+void LiveVariables::MarkVirtRegAliveInBlock(unsigned reg,
 MachineBasicBlock *MBB) {
   std::vector WorkList;
-  MarkVirtRegAliveInBlock(VRInfo, MBB, WorkList);
+  MarkVirtRegAliveInBlock(reg, MBB, WorkList);
   while (!WorkList.empty()) {
 MachineBasicBlock *Pred = WorkList.back();
 WorkList.pop_back();
-MarkVirtRegAliveInBlock(VRInfo, Pred, WorkList);
+MarkVirtRegAliveInBlock(reg, Pred, WorkList);
   }
 }
 
 
-void LiveVariables::HandleVirtRegUse(VarInfo &VRInfo, MachineBasicBlock *MBB,
+void LiveVariables::HandleVirtRegUse(unsigned reg, MachineBasicBlock *MBB,
  MachineInstr *MI) {
-  assert(VRInfo.DefInst && "Register use before def!");
+  MachineRegisterInfo& MRI = MBB->getParent()->getRegInfo();
+  assert(MRI.getVRegDef(reg) && "Register use before def!");
 
   unsigned BBNum = MBB->getNumber();
 
+  VarInfo& VRInfo = getVarInfo(reg);
   VRInfo.UsedBlocks[BBNum] = true;
   VRInfo.NumUses++;
 
@@ -177,7 +177,7 @@
 assert(VRInfo.Kills[i]->getParent() != MBB && "entry should be at end!");
 #endif
 
-  assert(MBB != VRInfo.DefInst->getParent() &&
+  assert(MBB != MRI.getVRegDef(reg)->getParent() &&
  "Should have kill for defblock!");
 
   // Add a new kill entry for this basic block.
@@ -190,7 +190,7 @@
   // Update all dominating blocks to mark them known live.
   for (MachineBasicBlock::const_pred_iterator PI = MBB->pred_begin(),
  E = MBB->pred_end(); PI != E; ++PI)
-MarkVirtRegAliveInBlock(VRInfo, *PI);
+MarkVirtRegAliveInBlock(reg, *PI);
 }
 
 bool LiveVariables::addRegisterKilled(unsigned IncomingReg, MachineInstr *MI,
@@ -489,7 +489,7 @@
 MachineOperand &MO = MI->getOperand(i);
 if (MO.isRegister() && MO.isUse() && MO.getReg()) {
   if (MRegisterInfo::isVirtualRegister(MO.getReg())){
-HandleVirtRegUse(getVarInfo(MO.getReg()), MBB, MI);
+HandleVirtRegUse(MO.getReg(), MBB, MI);
   } else if (MRegisterInfo::isPhysicalRegister(MO.getReg()) &&
  !ReservedRegisters[MO.getReg()]) {
 HandlePhysRegUse(MO.getReg(), MI);
@@ -503,9 +503,6 @@
 if (MO.isRegister() && MO.isDef() && MO.getReg()) {
   if (MRegisterInfo::isVirtualRegister(MO.getReg())) {
 VarInfo &VRInfo = getVarInfo(MO.getReg());
-
-assert(VRInfo.DefInst == 0 && "Variable multiply defined!");
-VRInfo.DefInst = MI;
 // Defaults to dead
 VRInfo.Kills.push_back(MI);
   } else if (MRegisterInfo::isPhysicalRegister(MO.getReg()) &&
@@ -525,11 +522,8 @@
 
   for (SmallVector::iterator I = VarInfoVec.begin(),
  E = VarInfoVec.end()

[llvm-commits] [llvm] r46017 - in /llvm/trunk/lib/Target: ARM/ARMInstrInfo.td ARM/ARMInstrVFP.td Alpha/AlphaInstrInfo.td CellSPU/SPUNodes.td PowerPC/PPCInstrInfo.td TargetSelectionDAG.td X86/X86InstrI

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 16:02:54 2008
New Revision: 46017

URL: http://llvm.org/viewvc/llvm-project?rev=46017&view=rev
Log:
rename SDTRet -> SDTNone.
Move definition of 'trap' sdnode up from x86 instrinfo to targetselectiondag.td.

Modified:
llvm/trunk/lib/Target/ARM/ARMInstrInfo.td
llvm/trunk/lib/Target/ARM/ARMInstrVFP.td
llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.td
llvm/trunk/lib/Target/CellSPU/SPUNodes.td
llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.td
llvm/trunk/lib/Target/TargetSelectionDAG.td
llvm/trunk/lib/Target/X86/X86InstrInfo.td

Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.td?rev=46017&r1=46016&r2=46017&view=diff

==
--- llvm/trunk/lib/Target/ARM/ARMInstrInfo.td (original)
+++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Tue Jan 15 16:02:54 2008
@@ -57,7 +57,7 @@
 def ARMcall_nolink   : SDNode<"ARMISD::CALL_NOLINK", SDT_ARMcall,
   [SDNPHasChain, SDNPOptInFlag, SDNPOutFlag]>;
 
-def ARMretflag   : SDNode<"ARMISD::RET_FLAG", SDTRet,
+def ARMretflag   : SDNode<"ARMISD::RET_FLAG", SDTNone,
   [SDNPHasChain, SDNPOptInFlag]>;
 
 def ARMcmov  : SDNode<"ARMISD::CMOV", SDT_ARMCMov,

Modified: llvm/trunk/lib/Target/ARM/ARMInstrVFP.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrVFP.td?rev=46017&r1=46016&r2=46017&view=diff

==
--- llvm/trunk/lib/Target/ARM/ARMInstrVFP.td (original)
+++ llvm/trunk/lib/Target/ARM/ARMInstrVFP.td Tue Jan 15 16:02:54 2008
@@ -79,7 +79,7 @@
 def arm_ftosi  : SDNode<"ARMISD::FTOSI", SDT_FTOI>;
 def arm_sitof  : SDNode<"ARMISD::SITOF", SDT_ITOF>;
 def arm_uitof  : SDNode<"ARMISD::UITOF", SDT_ITOF>;
-def arm_fmstat : SDNode<"ARMISD::FMSTAT", SDTRet, [SDNPInFlag,SDNPOutFlag]>;
+def arm_fmstat : SDNode<"ARMISD::FMSTAT", SDTNone, [SDNPInFlag,SDNPOutFlag]>;
 def arm_cmpfp  : SDNode<"ARMISD::CMPFP", SDT_ARMCmp, [SDNPOutFlag]>;
 def arm_cmpfp0 : SDNode<"ARMISD::CMPFPw0", SDT_CMPFP0, [SDNPOutFlag]>;
 def arm_fmdrr  : SDNode<"ARMISD::FMDRR", SDT_FMDRR>;

Modified: llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.td?rev=46017&r1=46016&r2=46017&view=diff

==
--- llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.td (original)
+++ llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.td Tue Jan 15 16:02:54 2008
@@ -26,7 +26,7 @@
 def Alpha_gprelhi : SDNode<"AlphaISD::GPRelHi",   SDTIntBinOp, []>;
 def Alpha_rellit  : SDNode<"AlphaISD::RelLit",SDTIntBinOp, [SDNPMayLoad]>;
 
-def retflag   : SDNode<"AlphaISD::RET_FLAG", SDTRet,
+def retflag   : SDNode<"AlphaISD::RET_FLAG", SDTNone,
   [SDNPHasChain, SDNPOptInFlag]>;
 
 // These are target-independent nodes, but have target-specific formats.

Modified: llvm/trunk/lib/Target/CellSPU/SPUNodes.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUNodes.td?rev=46017&r1=46016&r2=46017&view=diff

==
--- llvm/trunk/lib/Target/CellSPU/SPUNodes.td (original)
+++ llvm/trunk/lib/Target/CellSPU/SPUNodes.td Tue Jan 15 16:02:54 2008
@@ -222,5 +222,5 @@
 // instruction scheduling doesn't disassociate them.)
 
//===--===//
 
-def retflag : SDNode<"SPUISD::RET_FLAG", SDTRet,
+def retflag : SDNode<"SPUISD::RET_FLAG", SDTNone,
  [SDNPHasChain, SDNPOptInFlag]>;

Modified: llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.td?rev=46017&r1=46016&r2=46017&view=diff

==
--- llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.td (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.td Tue Jan 15 16:02:54 2008
@@ -105,13 +105,13 @@
[SDNPHasChain, SDNPOptInFlag, SDNPOutFlag]>;
 def PPCmtctr  : SDNode<"PPCISD::MTCTR", SDT_PPCCall,
[SDNPHasChain, SDNPOptInFlag, SDNPOutFlag]>;
-def PPCbctrl_Macho  : SDNode<"PPCISD::BCTRL_Macho", SDTRet,
+def PPCbctrl_Macho  : SDNode<"PPCISD::BCTRL_Macho", SDTNone,
   [SDNPHasChain, SDNPOptInFlag, SDNPOutFlag]>;
 
-def PPCbctrl_ELF  : SDNode<"PPCISD::BCTRL_ELF", SDTRet,
+def PPCbctrl_ELF  : SDNode<"PPCISD::BCTRL_ELF", SDTNone,
   [SDNPHasChain, SDNPOptInFlag, SDNPOutFlag]>;
 
-def retflag   : SDNode<"PPCISD::RET_FLAG", SDTRet,
+def retflag   : SDNode<"PPCISD::RET_FLAG", SDTNone,
   [SDNPHasChain, SDNPOptInFlag]>;
 
 de

[llvm-commits] [llvm] r46018 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 16:09:33 2008
New Revision: 46018

URL: http://llvm.org/viewvc/llvm-project?rev=46018&view=rev
Log:
The type of the 'abort' node should be pointer type (because
it's a function pointer) not MVT::Other.  This fixes builtin_trap
lowering on ppc, alpha, ia64

Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=46018&r1=46017&r2=46018&view=diff

==
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Tue Jan 15 16:09:33 2008
@@ -3752,7 +3752,8 @@
   TargetLowering::ArgListTy Args;
   std::pair CallResult =
 TLI.LowerCallTo(Tmp1, Type::VoidTy, false, false, CallingConv::C, 
false,
-DAG.getExternalSymbol("abort", MVT::Other), Args, DAG);
+DAG.getExternalSymbol("abort", TLI.getPointerTy()),
+Args, DAG);
   Result = CallResult.second;
   break;
 }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46019 - /llvm/trunk/lib/Target/PowerPC/README.txt

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 16:15:02 2008
New Revision: 46019

URL: http://llvm.org/viewvc/llvm-project?rev=46019&view=rev
Log:
If someone wants to implement ppc TRAP, they can go for it :)

Modified:
llvm/trunk/lib/Target/PowerPC/README.txt

Modified: llvm/trunk/lib/Target/PowerPC/README.txt
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/README.txt?rev=46019&r1=46018&r2=46019&view=diff

==
--- llvm/trunk/lib/Target/PowerPC/README.txt (original)
+++ llvm/trunk/lib/Target/PowerPC/README.txt Tue Jan 15 16:15:02 2008
@@ -3,6 +3,7 @@
 TODO:
 * gpr0 allocation
 * implement do-loop -> bdnz transform
+* Implement __builtin_trap (ISD::TRAP) as 'tw 31, 0, 0' aka 'trap'.
 
 ===-===
 


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46020 - /llvm/trunk/test/CodeGen/Generic/trap.ll

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 16:17:26 2008
New Revision: 46020

URL: http://llvm.org/viewvc/llvm-project?rev=46020&view=rev
Log:
new testcase for llvm.trap.

Added:
llvm/trunk/test/CodeGen/Generic/trap.ll

Added: llvm/trunk/test/CodeGen/Generic/trap.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/trap.ll?rev=46020&view=auto

==
--- llvm/trunk/test/CodeGen/Generic/trap.ll (added)
+++ llvm/trunk/test/CodeGen/Generic/trap.ll Tue Jan 15 16:17:26 2008
@@ -0,0 +1,9 @@
+; RUN: llvm-as < %s | llc
+define i32 @test() noreturn nounwind  {
+entry:
+   tail call void @llvm.trap( )
+   unreachable
+}
+
+declare void @llvm.trap() nounwind 
+


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46021 - /llvm/trunk/include/llvm/CodeGen/LiveVariables.h

2008-01-15 Thread Evan Cheng
Author: evancheng
Date: Tue Jan 15 16:19:35 2008
New Revision: 46021

URL: http://llvm.org/viewvc/llvm-project?rev=46021&view=rev
Log:
Unbreak the build.

Modified:
llvm/trunk/include/llvm/CodeGen/LiveVariables.h

Modified: llvm/trunk/include/llvm/CodeGen/LiveVariables.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveVariables.h?rev=46021&r1=46020&r2=46021&view=diff

==
--- llvm/trunk/include/llvm/CodeGen/LiveVariables.h (original)
+++ llvm/trunk/include/llvm/CodeGen/LiveVariables.h Tue Jan 15 16:19:35 2008
@@ -303,10 +303,10 @@
   /// register.
   VarInfo &getVarInfo(unsigned RegIdx);
 
-  void MarkVirtRegAliveInBlock(VarInfo &VRInfo, MachineBasicBlock *BB);
-  void MarkVirtRegAliveInBlock(VarInfo &VRInfo, MachineBasicBlock *BB,
+  void MarkVirtRegAliveInBlock(unsigned reg, MachineBasicBlock *BB);
+  void MarkVirtRegAliveInBlock(unsigned reg, MachineBasicBlock *BB,
std::vector &WorkList);
-  void HandleVirtRegUse(VarInfo &VRInfo, MachineBasicBlock *MBB,
+  void HandleVirtRegUse(unsigned reg, MachineBasicBlock *MBB,
 MachineInstr *MI);
 };
 


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r46021 - /llvm/trunk/include/llvm/CodeGen/LiveVariables.h

2008-01-15 Thread Owen Anderson

Ach, sorry.

--Owen

On Jan 15, 2008, at 4:19 PM, Evan Cheng wrote:


Author: evancheng
Date: Tue Jan 15 16:19:35 2008
New Revision: 46021

URL: http://llvm.org/viewvc/llvm-project?rev=46021&view=rev
Log:
Unbreak the build.

Modified:
   llvm/trunk/include/llvm/CodeGen/LiveVariables.h

Modified: llvm/trunk/include/llvm/CodeGen/LiveVariables.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveVariables.h?rev=46021&r1=46020&r2=46021&view=diff

=
=
=
=
=
=
=
=
==
--- llvm/trunk/include/llvm/CodeGen/LiveVariables.h (original)
+++ llvm/trunk/include/llvm/CodeGen/LiveVariables.h Tue Jan 15  
16:19:35 2008

@@ -303,10 +303,10 @@
  /// register.
  VarInfo &getVarInfo(unsigned RegIdx);

-  void MarkVirtRegAliveInBlock(VarInfo &VRInfo, MachineBasicBlock  
*BB);
-  void MarkVirtRegAliveInBlock(VarInfo &VRInfo, MachineBasicBlock  
*BB,

+  void MarkVirtRegAliveInBlock(unsigned reg, MachineBasicBlock *BB);
+  void MarkVirtRegAliveInBlock(unsigned reg, MachineBasicBlock *BB,
   std::vector  
&WorkList);

-  void HandleVirtRegUse(VarInfo &VRInfo, MachineBasicBlock *MBB,
+  void HandleVirtRegUse(unsigned reg, MachineBasicBlock *MBB,
MachineInstr *MI);
};



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




smime.p7s
Description: S/MIME cryptographic signature
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46023 - /llvm/trunk/test/CodeGen/X86/trap.ll

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 16:22:02 2008
New Revision: 46023

URL: http://llvm.org/viewvc/llvm-project?rev=46023&view=rev
Log:
verify x86 generates ud2 for llvm.trap

Added:
llvm/trunk/test/CodeGen/X86/trap.ll

Added: llvm/trunk/test/CodeGen/X86/trap.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/trap.ll?rev=46023&view=auto

==
--- llvm/trunk/test/CodeGen/X86/trap.ll (added)
+++ llvm/trunk/test/CodeGen/X86/trap.ll Tue Jan 15 16:22:02 2008
@@ -0,0 +1,9 @@
+; RUN: llvm-as < %s | llc -march=x86 -mcpu=yonah | grep ud2
+define i32 @test() noreturn nounwind  {
+entry:
+   tail call void @llvm.trap( )
+   unreachable
+}
+
+declare void @llvm.trap() nounwind 
+


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r46016 - in /llvm/trunk/lib: CodeGen/LiveVariables.cpp CodeGen/PHIElimination.cpp CodeGen/TwoAddressInstructionPass.cpp Target/ARM/ARMInstrInfo.cpp

2008-01-15 Thread Chris Lattner
On Jan 15, 2008, at 2:02 PM, Owen Anderson wrote:
> URL: http://llvm.org/viewvc/llvm-project?rev=46016&view=rev
> Log:
> Remove DefInst from LiveVariables::VarInfo.  Use the facilities on  
> MachineRegisterInfo instead.

Woot,

> +void LiveVariables::MarkVirtRegAliveInBlock(unsigned reg,
> MachineBasicBlock *MBB,
> std::vector  
> &WorkList) {
>   unsigned BBNum = MBB->getNumber();
>
> +  VarInfo& VRInfo = getVarInfo(reg);
> +
>   // Check to see if this basic block is one of the killing blocks.   
> If so,
>   // remove it...
>   for (unsigned i = 0, e = VRInfo.Kills.size(); i != e; ++i)
> @@ -129,8 +126,9 @@
>   VRInfo.Kills.erase(VRInfo.Kills.begin()+i);  // Erase entry
>   break;
> }
> +
> +  MachineRegisterInfo& MRI = MBB->getParent()->getRegInfo();
> +  if (MBB == MRI.getVRegDef(reg)->getParent()) return;  //  
> Terminate recursion


This is a performance sensitive routine, how about passing the  
defining MBB down so that you only call getVRegDef once per vreg,  
instead of once per block is it live across?

-Chris

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46024 - /llvm/trunk/docs/LangRef.html

2008-01-15 Thread Anton Korobeynikov
Author: asl
Date: Tue Jan 15 16:31:34 2008
New Revision: 46024

URL: http://llvm.org/viewvc/llvm-project?rev=46024&view=rev
Log:
Add description of 'llvm.trap' intrinsic. Also, minor fixes in formatting. 

Modified:
llvm/trunk/docs/LangRef.html

Modified: llvm/trunk/docs/LangRef.html
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.html?rev=46024&r1=46023&r2=46024&view=diff

==
--- llvm/trunk/docs/LangRef.html (original)
+++ llvm/trunk/docs/LangRef.html Tue Jan 15 16:31:34 2008
@@ -208,10 +208,10 @@
 
   
 llvm.var.annotation' Intrinsic
-
-
   
 llvm.annotation.*' Intrinsic
+  
+llvm.trap' Intrinsic
 
   
 
@@ -5238,10 +5238,11 @@
 Semantics:
 
 
-This intrinsic allows annotation of local variables with arbitrary strings.  
+This intrinsic allows annotation of local variables with arbitrary strings.
 This can be useful for special purpose optimizations that want to look for 
these
- annotations.  These have no other defined use, they are ignored by code 
- generation and optimization.
+annotations.  These have no other defined use, they are ignored by code
+generation and optimization.
+
 
 
 
@@ -5287,6 +5288,39 @@
 are ignored by code generation and optimization.
 
 
+
+
+  'llvm.trap' Intrinsic
+
+
+
+
+Syntax:
+
+  declare void @llvm.trap()
+
+
+Overview:
+
+
+The 'llvm.trap' intrinsic
+
+
+Arguments:
+
+
+None
+
+
+Semantics:
+
+
+This intrinsics is lowered to the target dependent trap instruction. If the
+target does not have a trap instruction, this intrinsic will be lowered to the
+call of the abort() function.
+
+
+
 
 
 


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46025 - /llvm/trunk/test/Transforms/ArgumentPromotion/byval-2.ll

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 16:38:12 2008
New Revision: 46025

URL: http://llvm.org/viewvc/llvm-project?rev=46025&view=rev
Log:
add a test to ensure that argpromote of one argument doesn't 
break the byval attr on some other argument.

Added:
llvm/trunk/test/Transforms/ArgumentPromotion/byval-2.ll

Added: llvm/trunk/test/Transforms/ArgumentPromotion/byval-2.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ArgumentPromotion/byval-2.ll?rev=46025&view=auto

==
--- llvm/trunk/test/Transforms/ArgumentPromotion/byval-2.ll (added)
+++ llvm/trunk/test/Transforms/ArgumentPromotion/byval-2.ll Tue Jan 15 16:38:12 
2008
@@ -0,0 +1,26 @@
+; RUN: llvm-as < %s | opt -argpromotion | llvm-dis | grep -F {i32* byval} | 
count 2
+; Argpromote + scalarrepl should change this to passing the two integers by 
value.
+
+   %struct.ss = type { i32, i64 }
+
+define internal void @f(%struct.ss* byval  %b, i32* byval %X) nounwind  {
+entry:
+   %tmp = getelementptr %struct.ss* %b, i32 0, i32 0
+   %tmp1 = load i32* %tmp, align 4
+   %tmp2 = add i32 %tmp1, 1
+   store i32 %tmp2, i32* %tmp, align 4
+
+   store i32 0, i32* %X
+   ret void
+}
+
+define i32 @test(i32* %X) {
+entry:
+   %S = alloca %struct.ss  ; <%struct.ss*> [#uses=4]
+   %tmp1 = getelementptr %struct.ss* %S, i32 0, i32 0  ; 
 [#uses=1]
+   store i32 1, i32* %tmp1, align 8
+   %tmp4 = getelementptr %struct.ss* %S, i32 0, i32 1  ; 
 [#uses=1]
+   store i64 2, i64* %tmp4, align 4
+   call void @f( %struct.ss* byval %S, i32* byval %X) 
+   ret i32 0
+}


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r45850 - /llvm/trunk/lib/VMCore/Verifier.cpp

2008-01-15 Thread Chris Lattner

On Jan 13, 2008, at 12:18 AM, Duncan Sands wrote:

>>> there are some issues that need to be fixed:
>>> (1) the asm parser drops parameter attributes specified on the  
>>> varargs
>>> part of a call/invoke;
>>> (2) when the DAE pass drops varargs call arguments, the parameter
>>> attributes need to be trimmed, since otherwise you can have  
>>> attributes
>>> that don't correspond to a call argument any more;
>>> (3) when instcombine resolves calls to a bitcast of a function into
>>> a direct call, then parameter attributes will be lost on any varargs
>>> part of a call.
>
> These are all done.
>
>> One more. When llvm-extract remove a function with byval parameters,
>> it also drops the attribute.
>
> I don't know what llvm-extract is, so how about I leave that to you :)

I'll let evan deal with this one too :)

> There is one more problem place: ArgumentPromotion.  After rewriting a
> function, it rewrites all calls to the function, but doesn't adjust  
> their
> parameter attributes.

ArgPromotion does do this, and I added a testcase to verify it.  It  
looks like it recomputes the Function's param attrs perfectly and just  
applies that attr list to all calls.

-Chris
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46026 - in /llvm/trunk: Makefile.config.in lib/VMCore/Makefile

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 16:50:50 2008
New Revision: 46026

URL: http://llvm.org/viewvc/llvm-project?rev=46026&view=rev
Log:
improve compatibility with mingw, patch by Alain Frisch

Modified:
llvm/trunk/Makefile.config.in
llvm/trunk/lib/VMCore/Makefile

Modified: llvm/trunk/Makefile.config.in
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.config.in?rev=46026&r1=46025&r2=46026&view=diff

==
--- llvm/trunk/Makefile.config.in (original)
+++ llvm/trunk/Makefile.config.in Tue Jan 15 16:50:50 2008
@@ -265,3 +265,11 @@
 ALL_BINDINGS  := @ALL_BINDINGS@
 OCAML_LIBDIR  := @OCAML_LIBDIR@
 
+# When compiling under Mingw/Cygwin, executables such as tblgen
+# expect Windows paths, whereas the build system uses Unix paths.
+# The function SYSPATH transforms Unix paths into Windows paths.
+ifneq (,$(findstring -mno-cygwin, $(CXX)))
+  SYSPATH = $(shell echo $(1) | cygpath -m -f -)
+else
+  SYSPATH = $(1)
+endif

Modified: llvm/trunk/lib/VMCore/Makefile
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Makefile?rev=46026&r1=46025&r2=46026&view=diff

==
--- llvm/trunk/lib/VMCore/Makefile (original)
+++ llvm/trunk/lib/VMCore/Makefile Tue Jan 15 16:50:50 2008
@@ -21,7 +21,7 @@
 
 $(ObjDir)/Intrinsics.gen.tmp: $(ObjDir)/.dir $(INTRINSICTDS) $(TBLGEN)
$(Echo) Building Intrinsics.gen.tmp from Intrinsics.td
-   $(Verb) $(TableGen) $(INTRINSICTD) -o $@ -gen-intrinsic
+   $(Verb) $(TableGen) $(call SYSPATH, $(INTRINSICTD)) -o $(call SYSPATH, 
$@) -gen-intrinsic
 
 $(GENFILE): $(ObjDir)/Intrinsics.gen.tmp
$(Verb) $(CMP) -s $@ $< || ( $(CP) $< $@ && \


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] Patch for compiling with Mingw/Cygwin

2008-01-15 Thread Chris Lattner

On Jan 14, 2008, at 9:59 PM, Alain Frisch wrote:

> Chris Lattner wrote:
>> Okay, this looks really good.  One final question before I commit:  
>> why does tblgen want a windows path instead of a unix path?  Can  
>> that be fixed in tblgen?  Doesn't this affect llvm-as and all other  
>> tools?
>
> When we compile with Mingw/Cygwin, we want to produce plain Win32  
> programs and libraries that don't depend on the cygwin DLL to  
> resolve filenames, so it is normal that tools such as llvm-as don't  
> accept unix paths. This is exactly the same as for the normal Mingw  
> case. The difference with Mingw here is that the build system  
> (make), being a Cygwin program, works with unix paths, so some  
> translation is needed.

Ok, makes sense, thanks!

-Chris
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r46026 - in /llvm/trunk: Makefile.config.in lib/VMCore/Makefile

2008-01-15 Thread Alain Frisch
Chris Lattner wrote:
> Author: lattner
> Date: Tue Jan 15 16:50:50 2008
> New Revision: 46026
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=46026&view=rev
> Log:
> improve compatibility with mingw, patch by Alain Frisch
> 
> Modified:
> llvm/trunk/Makefile.config.in
> llvm/trunk/lib/VMCore/Makefile

Great, thanks!

(To make it work, note that Makefile.rules also needs to be patched.)

-- Alain
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46027 - in /llvm/trunk: include/llvm/CodeGen/LiveVariables.h lib/CodeGen/LiveVariables.cpp

2008-01-15 Thread Owen Anderson
Author: resistor
Date: Tue Jan 15 16:58:11 2008
New Revision: 46027

URL: http://llvm.org/viewvc/llvm-project?rev=46027&view=rev
Log:
Move some calls to getVRegDef higher in the callgraph, so they don't get 
executed as frequently in performance sensitive code.

Modified:
llvm/trunk/include/llvm/CodeGen/LiveVariables.h
llvm/trunk/lib/CodeGen/LiveVariables.cpp

Modified: llvm/trunk/include/llvm/CodeGen/LiveVariables.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveVariables.h?rev=46027&r1=46026&r2=46027&view=diff

==
--- llvm/trunk/include/llvm/CodeGen/LiveVariables.h (original)
+++ llvm/trunk/include/llvm/CodeGen/LiveVariables.h Tue Jan 15 16:58:11 2008
@@ -303,8 +303,10 @@
   /// register.
   VarInfo &getVarInfo(unsigned RegIdx);
 
-  void MarkVirtRegAliveInBlock(unsigned reg, MachineBasicBlock *BB);
-  void MarkVirtRegAliveInBlock(unsigned reg, MachineBasicBlock *BB,
+  void MarkVirtRegAliveInBlock(VarInfo& VRInfo, MachineBasicBlock* DefBlock,
+   MachineBasicBlock *BB);
+  void MarkVirtRegAliveInBlock(VarInfo& VRInfo, MachineBasicBlock* DefBlock,
+   MachineBasicBlock *BB,
std::vector &WorkList);
   void HandleVirtRegUse(unsigned reg, MachineBasicBlock *MBB,
 MachineInstr *MI);

Modified: llvm/trunk/lib/CodeGen/LiveVariables.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveVariables.cpp?rev=46027&r1=46026&r2=46027&view=diff

==
--- llvm/trunk/lib/CodeGen/LiveVariables.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveVariables.cpp Tue Jan 15 16:58:11 2008
@@ -112,12 +112,11 @@
   return false;
 }
 
-void LiveVariables::MarkVirtRegAliveInBlock(unsigned reg,
+void LiveVariables::MarkVirtRegAliveInBlock(VarInfo& VRInfo,
+MachineBasicBlock *DefBlock,
 MachineBasicBlock *MBB,
 std::vector &WorkList) 
{
   unsigned BBNum = MBB->getNumber();
-
-  VarInfo& VRInfo = getVarInfo(reg);
   
   // Check to see if this basic block is one of the killing blocks.  If so,
   // remove it...
@@ -127,8 +126,7 @@
   break;
 }
   
-  MachineRegisterInfo& MRI = MBB->getParent()->getRegInfo();
-  if (MBB == MRI.getVRegDef(reg)->getParent()) return;  // Terminate recursion
+  if (MBB == DefBlock) return;  // Terminate recursion
 
   if (VRInfo.AliveBlocks[BBNum])
 return;  // We already know the block is live
@@ -141,14 +139,15 @@
 WorkList.push_back(*PI);
 }
 
-void LiveVariables::MarkVirtRegAliveInBlock(unsigned reg,
+void LiveVariables::MarkVirtRegAliveInBlock(VarInfo& VRInfo,
+MachineBasicBlock *DefBlock,
 MachineBasicBlock *MBB) {
   std::vector WorkList;
-  MarkVirtRegAliveInBlock(reg, MBB, WorkList);
+  MarkVirtRegAliveInBlock(VRInfo, DefBlock, MBB, WorkList);
   while (!WorkList.empty()) {
 MachineBasicBlock *Pred = WorkList.back();
 WorkList.pop_back();
-MarkVirtRegAliveInBlock(reg, Pred, WorkList);
+MarkVirtRegAliveInBlock(VRInfo, DefBlock, Pred, WorkList);
   }
 }
 
@@ -190,7 +189,7 @@
   // Update all dominating blocks to mark them known live.
   for (MachineBasicBlock::const_pred_iterator PI = MBB->pred_begin(),
  E = MBB->pred_end(); PI != E; ++PI)
-MarkVirtRegAliveInBlock(reg, *PI);
+MarkVirtRegAliveInBlock(VRInfo, MRI.getVRegDef(reg)->getParent(), *PI);
 }
 
 bool LiveVariables::addRegisterKilled(unsigned IncomingReg, MachineInstr *MI,
@@ -432,6 +431,7 @@
 bool LiveVariables::runOnMachineFunction(MachineFunction &mf) {
   MF = &mf;
   RegInfo = MF->getTarget().getRegisterInfo();
+  MachineRegisterInfo& MRI = mf.getRegInfo();
   assert(RegInfo && "Target doesn't have register information?");
 
   ReservedRegisters = RegInfo->getReservedRegs(mf);
@@ -523,7 +523,8 @@
   for (SmallVector::iterator I = VarInfoVec.begin(),
  E = VarInfoVec.end(); I != E; ++I) {
 // Only mark it alive only in the block we are representing.
-MarkVirtRegAliveInBlock(*I, MBB);
+MarkVirtRegAliveInBlock(getVarInfo(*I), 
MRI.getVRegDef(*I)->getParent(),
+MBB);
   }
 }
 
@@ -560,7 +561,6 @@
   // Convert and transfer the dead / killed information we have gathered into
   // VirtRegInfo onto MI's.
   //
-  MachineRegisterInfo& MRI = mf.getRegInfo();
   for (unsigned i = 0, e1 = VirtRegInfo.size(); i != e1; ++i)
 for (unsigned j = 0, e2 = VirtRegInfo[i].Kills.size(); j != e2; ++j) {
   if (VirtRegInfo[i].Kills[j] == MRI.getVRegDef(i + 


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commit

[llvm-commits] [llvm-gcc-4.2] r46028 - /llvm-gcc-4.2/trunk/gcc/tree-eh.c

2008-01-15 Thread Dale Johannesen
Author: johannes
Date: Tue Jan 15 17:20:17 2008
New Revision: 46028

URL: http://llvm.org/viewvc/llvm-project?rev=46028&view=rev
Log:
Use 64 bits for "save_filt" temps on 64-bit targets.
LLVM uses 64 bits for these and they need to match.


Modified:
llvm-gcc-4.2/trunk/gcc/tree-eh.c

Modified: llvm-gcc-4.2/trunk/gcc/tree-eh.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/tree-eh.c?rev=46028&r1=46027&r2=46028&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/tree-eh.c (original)
+++ llvm-gcc-4.2/trunk/gcc/tree-eh.c Tue Jan 15 17:20:17 2008
@@ -838,14 +838,22 @@
   tree save_eptr, save_filt;
 
   save_eptr = create_tmp_var (ptr_type_node, "save_eptr");
+#if ENABLE_LLVM
+  /* LLVM exceptions use 64 bits for these on 64-bit targets. */
+  save_filt = create_tmp_var (long_integer_type_node, "save_filt");
+#else
   save_filt = create_tmp_var (integer_type_node, "save_filt");
-
+#endif
   i = tsi_start (finally);
   x = build0 (EXC_PTR_EXPR, ptr_type_node);
   x = build2 (MODIFY_EXPR, void_type_node, save_eptr, x);
   tsi_link_before (&i, x, TSI_CONTINUE_LINKING);
 
+#if ENABLE_LLVM
+  x = build0 (FILTER_EXPR, long_integer_type_node);
+#else
   x = build0 (FILTER_EXPR, integer_type_node);
+#endif
   x = build2 (MODIFY_EXPR, void_type_node, save_filt, x);
   tsi_link_before (&i, x, TSI_CONTINUE_LINKING);
 
@@ -854,7 +862,11 @@
   x = build2 (MODIFY_EXPR, void_type_node, x, save_eptr);
   tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
 
+#if ENABLE_LLVM
+  x = build0 (FILTER_EXPR, long_integer_type_node);
+#else
   x = build0 (FILTER_EXPR, integer_type_node);
+#endif
   x = build2 (MODIFY_EXPR, void_type_node, x, save_filt);
   tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
 


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46029 - in /llvm/trunk: include/llvm/Target/TargetAsmInfo.h lib/CodeGen/DwarfWriter.cpp lib/Target/PowerPC/PPCTargetAsmInfo.cpp lib/Target/X86/X86AsmPrinter.cpp lib/Target/X86/X

2008-01-15 Thread Dale Johannesen
Author: johannes
Date: Tue Jan 15 17:24:56 2008
New Revision: 46029

URL: http://llvm.org/viewvc/llvm-project?rev=46029&view=rev
Log:
Fix and enable EH for x86-64 Darwin.  Adds
ShortenEHDataFor64Bits as a not-very-accurate
abstraction to cover all the changes in DwarfWriter.
Some cosmetic changes to Darwin assembly code for
gcc testsuite compatibility.


Modified:
llvm/trunk/include/llvm/Target/TargetAsmInfo.h
llvm/trunk/lib/CodeGen/DwarfWriter.cpp
llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp
llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp

Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=46029&r1=46028&r2=46029&view=diff

==
--- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Tue Jan 15 17:24:56 2008
@@ -313,6 +313,10 @@
 /// handle a weak_definition of constant 0 for an omitted EH frame.
 bool SupportsWeakOmittedEHFrame;  // Defaults to true.
 
+/// ShortenEHDataON64Bit - True if target exception table format requires
+/// 32-bit data in certain places even when targeting 64-bits.
+bool ShortenEHDataOn64Bit;// Defaults to false.
+
 /// DwarfSectionOffsetDirective - Special section offset directive.
 const char* DwarfSectionOffsetDirective; // Defaults to NULL
 
@@ -592,6 +596,9 @@
 bool getSupportsWeakOmittedEHFrame() const {
   return SupportsWeakOmittedEHFrame;
 }
+bool getShortenEHDataOn64Bit() const {
+  return ShortenEHDataOn64Bit;
+}
 const char *getDwarfSectionOffsetDirective() const {
   return DwarfSectionOffsetDirective;
 }

Modified: llvm/trunk/lib/CodeGen/DwarfWriter.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/DwarfWriter.cpp?rev=46029&r1=46028&r2=46029&view=diff

==
--- llvm/trunk/lib/CodeGen/DwarfWriter.cpp (original)
+++ llvm/trunk/lib/CodeGen/DwarfWriter.cpp Tue Jan 15 17:24:56 2008
@@ -2835,11 +2835,13 @@
 
   Asm->EOL("Personality (pcrel sdata4 indirect)");
   
-  PrintRelDirective();
+  PrintRelDirective(TAI->getShortenEHDataOn64Bit());
   O << TAI->getPersonalityPrefix();
   Asm->EmitExternalGlobal((const GlobalVariable *)(Personality));
   O << TAI->getPersonalitySuffix();
-  O << "-" << TAI->getPCSymbol();
+  if (!TAI->getShortenEHDataOn64Bit()) {
+O << "-" << TAI->getPCSymbol();
+  }
   Asm->EOL("Personality");
 
   Asm->EmitULEB128Bytes(DW_EH_PE_pcrel);
@@ -2917,7 +2919,7 @@
   // If there is a personality and landing pads then point to the language
   // specific data area in the exception table.
   if (EHFrameInfo.PersonalityIndex) {
-Asm->EmitULEB128Bytes(4);
+Asm->EmitULEB128Bytes(TAI->getShortenEHDataOn64Bit() ? 8 : 4);
 Asm->EOL("Augmentation size");
 
 if (EHFrameInfo.hasLandingPads) {
@@ -3284,24 +3286,26 @@
   }
 
   EmitSectionOffset(BeginTag, "eh_func_begin", BeginNumber, 
SubprogramCount,
-false, true);
+TAI->getShortenEHDataOn64Bit(), true);
   Asm->EOL("Region start");
 
   if (!S.EndLabel) {
-EmitDifference("eh_func_end", SubprogramCount, BeginTag, BeginNumber);
+EmitDifference("eh_func_end", SubprogramCount, BeginTag, BeginNumber,
+   TAI->getShortenEHDataOn64Bit());
   } else {
-EmitDifference("label", S.EndLabel, BeginTag, BeginNumber);
+EmitDifference("label", S.EndLabel, BeginTag, BeginNumber, 
+   TAI->getShortenEHDataOn64Bit());
   }
   Asm->EOL("Region length");
 
   if (!S.PadLabel) {
-if (TD->getPointerSize() == sizeof(int32_t))
+if (TD->getPointerSize() == sizeof(int32_t) || 
TAI->getShortenEHDataOn64Bit())
   Asm->EmitInt32(0);
 else
   Asm->EmitInt64(0);
   } else {
 EmitSectionOffset("label", "eh_func_begin", S.PadLabel, 
SubprogramCount,
-  false, true);
+  TAI->getShortenEHDataOn64Bit(), true);
   }
   Asm->EOL("Landing pad");
 

Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp?rev=46029&r1=46028&r2=46029&view=diff

==
--- llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp Tue Jan 15 17:24:56 2008
@@ -50,6 +50,7 @@
 StaticCtorsSection = ".mod_init_func";
 StaticDtorsSection = ".mod_term_func";
   }
+  SwitchToSectionDirective = "\t.section ";
   UsedDirective = "\t

[llvm-commits] [llvm] r46030 - /llvm/trunk/lib/Target/TargetAsmInfo.cpp

2008-01-15 Thread Dale Johannesen
Author: johannes
Date: Tue Jan 15 17:25:27 2008
New Revision: 46030

URL: http://llvm.org/viewvc/llvm-project?rev=46030&view=rev
Log:
Missed file from previous checkin.


Modified:
llvm/trunk/lib/Target/TargetAsmInfo.cpp

Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=46030&r1=46029&r2=46030&view=diff

==
--- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Tue Jan 15 17:25:27 2008
@@ -87,6 +87,7 @@
   DwarfRequiresFrameSection(true),
   GlobalEHDirective(0),
   SupportsWeakOmittedEHFrame(true),
+  ShortenEHDataOn64Bit(false),
   DwarfSectionOffsetDirective(0),
   DwarfAbbrevSection(".debug_abbrev"),
   DwarfInfoSection(".debug_info"),


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r46031 - in /llvm-gcc-4.2/trunk/gcc/config/i386: i386.c llvm-i386-target.h llvm-i386.cpp

2008-01-15 Thread Evan Cheng
Author: evancheng
Date: Tue Jan 15 17:26:36 2008
New Revision: 46031

URL: http://llvm.org/viewvc/llvm-project?rev=46031&view=rev
Log:
Clean up code.

Modified:
llvm-gcc-4.2/trunk/gcc/config/i386/i386.c
llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h
llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/i386.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/i386.c?rev=46031&r1=46030&r2=46031&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/config/i386/i386.c (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/i386.c Tue Jan 15 17:26:36 2008
@@ -21527,15 +21527,18 @@
 
 /* APPLE LOCAL begin LLVM */
 
-/* Target hook for llvm-abi.h. It returns true if an aggregate of the
-   specified type should be passed in memory. This is only called for
-   x86-64. */
-int llvm_x86_64_should_pass_aggregate_in_memory(tree type) {
-  int needed_intregs, needed_sseregs;
-  enum machine_mode mode = type_natural_mode (type);
-  return !examine_argument(mode, type, 1, &needed_intregs, &needed_sseregs);
+/* These are wrappers for type_natural_mode and examine_argument which are
+   both static functions. */
+enum machine_mode ix86_getNaturalModeForType(tree type) {
+  return type_natural_mode(type);
 }
 
+int ix86_HowToPassArgument(enum machine_mode mode, tree type, int in_return,
+ int *int_nregs, int *sse_nregs) {
+  return examine_argument(mode, type, in_return, int_nregs, sse_nregs);
+}
+
+  
 /* APPLE LOCAL end LLVM */
 
 #include "gt-i386.h"

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h?rev=46031&r1=46030&r2=46031&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Tue Jan 15 17:26:36 
2008
@@ -62,11 +62,10 @@
 }   \
   }
 
-extern int llvm_x86_64_should_pass_aggregate_in_memory(tree);
+extern bool llvm_x86_64_should_pass_aggregate_in_memory(tree);
 
 #define LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(X)  \
-  ((!TARGET_64BIT)  \
-  ? true : llvm_x86_64_should_pass_aggregate_in_memory(X))
+  (!TARGET_64BIT || llvm_x86_64_should_pass_aggregate_in_memory(X))
 
 /* LLVM LOCAL end (ENTIRE FILE!)  */
 

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp?rev=46031&r1=46030&r2=46031&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp Tue Jan 15 17:26:36 2008
@@ -660,4 +660,18 @@
   return false;
 }
 
+/* These are defined in i386.c */
+extern "C" enum machine_mode ix86_getNaturalModeForType(tree);
+extern "C" int ix86_HowToPassArgument(enum machine_mode, tree, int, int*, 
int*);
+
+/* Target hook for llvm-abi.h. It returns true if an aggregate of the
+   specified type should be passed in memory. This is only called for
+   x86-64. */
+bool llvm_x86_64_should_pass_aggregate_in_memory(tree type) {
+  int IntRegs, SSERegs;
+  enum machine_mode Mode = ix86_getNaturalModeForType(type);
+  /* If ix86_HowToPassArgument return 0, then it's passed byval in memory.*/
+  return !ix86_HowToPassArgument(Mode, type, 1, &IntRegs, &SSERegs);
+}
+
 /* LLVM LOCAL end (ENTIRE FILE!)  */


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46032 - /llvm/trunk/Makefile.rules

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 17:27:40 2008
New Revision: 46032

URL: http://llvm.org/viewvc/llvm-project?rev=46032&view=rev
Log:
Commit a piece that I missed before, patch by Alain Frisch

Modified:
llvm/trunk/Makefile.rules

Modified: llvm/trunk/Makefile.rules
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=46032&r1=46031&r2=46032&view=diff

==
--- llvm/trunk/Makefile.rules (original)
+++ llvm/trunk/Makefile.rules Tue Jan 15 17:27:40 2008
@@ -483,8 +483,14 @@
 ProgInstall   = $(INSTALL) $(Install.StripFlag) -m 0755 
 ScriptInstall = $(INSTALL) -m 0755 
 DataInstall   = $(INSTALL) -m 0644
-TableGen  = $(TBLGEN) -I $(PROJ_SRC_DIR) -I$(PROJ_SRC_ROOT)/include \
--I $(PROJ_SRC_ROOT)/lib/Target  
+
+# When compiling under Mingw/Cygwin, the tblgen tool expects Windows
+# paths. In this case, the SYSPATH function (defined in
+# Makefile.config) transforms Unix paths into Windows paths.
+TableGen  = $(TBLGEN) -I $(call SYSPATH, $(PROJ_SRC_DIR)) \
+-I $(call SYSPATH, $(PROJ_SRC_ROOT)/include) \
+-I $(call SYSPATH, $(PROJ_SRC_ROOT)/lib/Target)
+
 Archive   = $(AR) $(AR.Flags)
 LArchive  = $(LLVMToolDir)/llvm-ar rcsf
 ifdef RANLIB
@@ -1248,57 +1254,57 @@
 $(TARGET:%=$(ObjDir)/%GenRegisterNames.inc.tmp): \
 $(ObjDir)/%GenRegisterNames.inc.tmp : %.td $(ObjDir)/.dir
$(Echo) "Building $(http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r46026 - in /llvm/trunk: Makefile.config.in lib/VMCore/Makefile

2008-01-15 Thread Chris Lattner

On Jan 15, 2008, at 2:52 PM, Alain Frisch wrote:
> Great, thanks!
>
> (To make it work, note that Makefile.rules also needs to be patched.)

Ah, missed that piece, thank you for mentioning it!

-chris
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46033 - in /llvm/trunk: include/llvm/LinkTimeOptimizer.h tools/lto/lto.cpp

2008-01-15 Thread Devang Patel
Author: dpatel
Date: Tue Jan 15 17:52:34 2008
New Revision: 46033

URL: http://llvm.org/viewvc/llvm-project?rev=46033&view=rev
Log:
- Introduces versioning macro LLVM_LTO_VERSION
- Communicate symbol visibility
- Communicate code generation model

Modified:
llvm/trunk/include/llvm/LinkTimeOptimizer.h
llvm/trunk/tools/lto/lto.cpp

Modified: llvm/trunk/include/llvm/LinkTimeOptimizer.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LinkTimeOptimizer.h?rev=46033&r1=46032&r2=46033&view=diff

==
--- llvm/trunk/include/llvm/LinkTimeOptimizer.h (original)
+++ llvm/trunk/include/llvm/LinkTimeOptimizer.h Tue Jan 15 17:52:34 2008
@@ -20,6 +20,8 @@
 #include 
 #include 
 
+#define LLVM_LTO_VERSION 2
+
 namespace llvm {
 
   class Module;
@@ -45,6 +47,19 @@
 LTOInternalLinkage  // Rename collisions when linking (static functions)
   };
 
+  enum LTOVisibilityTypes {
+LTODefaultVisibility = 0,  ///< The GV is visible
+LTOHiddenVisibility,   ///< The GV is hidden
+LTOProtectedVisibility ///< The GV is protected
+  };
+
+
+  enum LTOCodeGenModel {
+LTO_CGM_Static,
+LTO_CGM_Dynamic,
+LTO_CGM_DynamicNoPIC
+  };
+
   /// This class represents LLVM symbol information without exposing details
   /// of LLVM global values. It encapsulates symbol linkage information. This
   /// is typically used in hash_map where associated name identifies the 
@@ -54,10 +69,13 @@
   public:
 
 LTOLinkageTypes getLinkage() const { return linkage; }
+LTOVisibilityTypes getVisibility() const { return visibility; }
 void mayBeNotUsed();
 
-LLVMSymbol (enum LTOLinkageTypes lt, GlobalValue *g, const std::string &n, 
-const std::string &m, int a) : linkage(lt), gv(g), name(n), 
+LLVMSymbol (enum LTOLinkageTypes lt, enum LTOVisibilityTypes vis, 
+GlobalValue *g, const std::string &n, 
+const std::string &m, int a) : linkage(lt), visibility(vis),
+   gv(g), name(n), 
mangledName(m), alignment(a) {}
 
 const char *getName() { return name.c_str(); }
@@ -66,6 +84,7 @@
 
   private:
 enum LTOLinkageTypes linkage;
+enum LTOVisibilityTypes visibility;
 GlobalValue *gv;
 std::string name;
 std::string mangledName;
@@ -91,11 +110,12 @@
   NameToSymbolMap &,
   std::set &) = 0;
 virtual enum LTOStatus optimizeModules(const std::string &,
-   std::vector &,
-   std::string &, bool, 
-   const char *) = 0;
+   std::vector 
&exportList,
+   std::string &targetTriple,
+   bool saveTemps, const char *) = 0;
 virtual void getTargetTriple(const std::string &, std::string &) = 0;
 virtual void removeModule (const std::string &InputFilename) = 0;
+virtual void setCodeGenModel(LTOCodeGenModel CGM) = 0;
 virtual void printVersion () = 0;
 virtual ~LinkTimeOptimizer() = 0;
   };
@@ -115,17 +135,20 @@
   std::set &references);
 enum LTOStatus optimizeModules(const std::string &OutputFilename,
std::vector &exportList,
-   std::string &targetTriple, bool saveTemps,
-   const char *);
+   std::string &targetTriple, 
+   bool saveTemps,  const char *);
 void getTargetTriple(const std::string &InputFilename, 
  std::string &targetTriple);
 void removeModule (const std::string &InputFilename);
 void printVersion();
 
+void setCodeGenModel(LTOCodeGenModel CGM) {
+  CGModel = CGM;
+}
+
 // Constructors and destructors
-LTO() { 
+LTO() : Target(NULL), CGModel(LTO_CGM_Dynamic) {
   /// TODO: Use Target info, it is available at this time.
-  Target = NULL; 
 }
 ~LTO();
 
@@ -140,6 +163,7 @@
 NameToSymbolMap allSymbols;
 NameToModuleMap allModules;
 TargetMachine *Target;
+LTOCodeGenModel CGModel;
   };
 
 } // End llvm namespace
@@ -148,6 +172,6 @@
 /// linker to use dlopen() interface to dynamically load LinkTimeOptimizer.
 /// extern "C" helps, because dlopen() interface uses name to find the symbol.
 extern "C"
-llvm::LinkTimeOptimizer *createLLVMOptimizer();
+llvm::LinkTimeOptimizer *createLLVMOptimizer(unsigned VERSION = 
LLVM_LTO_VERSION);
 
 #endif

Modified: llvm/trunk/tools/lto/lto.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.cpp?rev=46033&r1=46032&r2=46033&view=diff

==

[llvm-commits] [llvm] r46034 - /llvm/trunk/include/llvm/ADT/ImmutableMap.h

2008-01-15 Thread Ted Kremenek
Author: kremenek
Date: Tue Jan 15 17:53:53 2008
New Revision: 46034

URL: http://llvm.org/viewvc/llvm-project?rev=46034&view=rev
Log:
Changed ImmutableMap::find to return an iterator instead of a pointer
to the tree node.

Modified:
llvm/trunk/include/llvm/ADT/ImmutableMap.h

Modified: llvm/trunk/include/llvm/ADT/ImmutableMap.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ImmutableMap.h?rev=46034&r1=46033&r2=46034&view=diff

==
--- llvm/trunk/include/llvm/ADT/ImmutableMap.h (original)
+++ llvm/trunk/include/llvm/ADT/ImmutableMap.h Tue Jan 15 17:53:53 2008
@@ -98,15 +98,7 @@
   bool contains(key_type_ref K) const {
 return Root ? Root->contains(K) : false;
   }
-  
-  data_type* find(key_type_ref K) const {
-if (Root) {
-  TreeTy* T = Root->find(K);
-  if (T) return &T->getValue().second;
-}
-
-return NULL;
-  }
+
   
   bool operator==(ImmutableMap RHS) const {
 return Root && RHS.Root ? Root->isEqual(*RHS.Root) : Root == RHS.Root;
@@ -171,7 +163,7 @@
 
 iterator() {}
 iterator(TreeTy* t) : itr(t) {}
-friend class ImmutableSet;
+friend class ImmutableMap;
 
   public:
 inline value_type_ref operator*() const { return itr->getValue(); }
@@ -189,6 +181,15 @@
   iterator begin() const { return iterator(Root); }
   iterator end() const { return iterator(); }  
   
+  iterator find(key_type_ref K) const {
+if (Root) {
+  TreeTy* T = Root->find(K);
+  if (T) return iterator(T);
+}
+
+return iterator();
+  }
+  
   //===--===//
   // Utility methods.
   //===--===//  


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r46041 - in /llvm-gcc-4.2/trunk/gcc: config/darwin.h llvm-backend.cpp llvm.h objc/objc-act.c varasm.c

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 19:15:26 2008
New Revision: 46041

URL: http://llvm.org/viewvc/llvm-project?rev=46041&view=rev
Log:
The final ultimate(?) fix for the silly objc .reference thing.  Instead of 
ignoring
them, we now queue them up as a file-scope inline asm block.  This allows us to 
emit the same directives as gcc.

Modified:
llvm-gcc-4.2/trunk/gcc/config/darwin.h
llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
llvm-gcc-4.2/trunk/gcc/llvm.h
llvm-gcc-4.2/trunk/gcc/objc/objc-act.c
llvm-gcc-4.2/trunk/gcc/varasm.c

Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/darwin.h?rev=46041&r1=46040&r2=46041&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/config/darwin.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/darwin.h Tue Jan 15 19:15:26 2008
@@ -920,7 +920,22 @@
 #undef  TARGET_ASM_RELOC_RW_MASK
 #define TARGET_ASM_RELOC_RW_MASK machopic_reloc_rw_mask
 
-
+/* LLVM LOCAL begin */
+#ifdef ENABLE_LLVM
+#define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME)\
+do {   \
+if (FILE) {\
+   char Buffer[strlen(NAME)+30];   \
+   sprintf(Buffer, "\t.lazy_reference %s", NAME);  \
+  if (MACHOPIC_INDIRECT)   \
+ sprintf(Buffer, "\t.lazy_reference %s", NAME);\
+  else \
+ sprintf(Buffer, "\t.reference %s", NAME); \
+  llvm_emit_file_scope_asm(Buffer);\
+}  \
+   } while (0)
+#else
+/* LLVM LOCAL end */
 #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME)\
 do {   \
 if (FILE) {\
@@ -932,6 +947,8 @@
   fprintf (FILE, "\n");\
 }  \
} while (0)
+/* LLVM LOCAL */
+#endif /*ENABLE_LLVM*/
 
 #define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \
 do {   \

Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=46041&r1=46040&r2=46041&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Tue Jan 15 19:15:26 2008
@@ -1282,14 +1282,12 @@
 // llvm_emit_file_scope_asm - Emit the specified string as a file-scope inline
 // asm block.
 //
-void llvm_emit_file_scope_asm(tree string) {
-  if (TREE_CODE(string) == ADDR_EXPR)
-string = TREE_OPERAND(string, 0);
+void llvm_emit_file_scope_asm(const char *string) {
   if (TheModule->getModuleInlineAsm().empty())
-TheModule->setModuleInlineAsm(TREE_STRING_POINTER(string));
+TheModule->setModuleInlineAsm(string);
   else
 TheModule->setModuleInlineAsm(TheModule->getModuleInlineAsm() + "\n" +
-  TREE_STRING_POINTER(string));
+  string);
 }
 
 

Modified: llvm-gcc-4.2/trunk/gcc/llvm.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm.h?rev=46041&r1=46040&r2=46041&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/llvm.h (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm.h Tue Jan 15 19:15:26 2008
@@ -76,7 +76,7 @@
 /* llvm_emit_file_scope_asm - Emit the specified string as a file-scope inline
  * asm block.
  */
-void llvm_emit_file_scope_asm(union tree_node*);
+void llvm_emit_file_scope_asm(const char*);
 
 /* llvm_emit_typedef - Emit the specified TYPE_DECL if desired.
  */

Modified: llvm-gcc-4.2/trunk/gcc/objc/objc-act.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/objc/objc-act.c?rev=46041&r1=46040&r2=46041&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/objc/objc-act.c (original)
+++ llvm-gcc-4.2/trunk/gcc/objc/objc-act.c Tue Jan 15 19:15:26 2008
@@ -18261,11 +18261,7 @@
 #ifdef ASM_DECLARE_UNRESOLVED_REFERENCE
   if (flag_next_runtime)
 {
-  /* LLVM LOCAL begin - radar 5681912 */
-#ifndef ENABLE_LLVM
   ASM_DECLARE_UNRESOLVED_REFERENCE (asm_out_file, string);
-#endif
-  /* LLVM LOCAL end - radar 5681912 */
   return;
 }
 #endif

Modified: llvm-gcc-4.2/trunk/gcc/varasm.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/varasm.c?rev=4604

[llvm-commits] [llvm-gcc-4.0] r46042 - in /llvm-gcc-4.0/trunk/gcc: config/darwin.h llvm-backend.cpp llvm.h objc/objc-act.c varasm.c

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 19:19:03 2008
New Revision: 46042

URL: http://llvm.org/viewvc/llvm-project?rev=46042&view=rev
Log:
The final ultimate(?) fix for the silly objc .reference thing.  Instead of 
ignoring
them, we now queue them up as a file-scope inline asm block.  This allows us to 
emit the same directives as gcc.



Modified:
llvm-gcc-4.0/trunk/gcc/config/darwin.h
llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp
llvm-gcc-4.0/trunk/gcc/llvm.h
llvm-gcc-4.0/trunk/gcc/objc/objc-act.c
llvm-gcc-4.0/trunk/gcc/varasm.c

Modified: llvm-gcc-4.0/trunk/gcc/config/darwin.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/config/darwin.h?rev=46042&r1=46041&r2=46042&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/config/darwin.h (original)
+++ llvm-gcc-4.0/trunk/gcc/config/darwin.h Tue Jan 15 19:19:03 2008
@@ -1381,7 +1381,22 @@
 #undef  TARGET_ASM_FUNCTION_RODATA_SECTION
 #define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
 
-
+/* LLVM LOCAL begin */
+#ifdef ENABLE_LLVM
+#define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME)\
+do {   \
+if (FILE) {\
+   char Buffer[strlen(NAME)+30];   \
+   sprintf(Buffer, "\t.lazy_reference %s", NAME);  \
+  if (MACHOPIC_INDIRECT)   \
+ sprintf(Buffer, "\t.lazy_reference %s", NAME);\
+  else \
+ sprintf(Buffer, "\t.reference %s", NAME); \
+  llvm_emit_file_scope_asm(Buffer);\
+}  \
+   } while (0)
+#else
+/* LLVM LOCAL end */
 #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME)\
 do {   \
 if (FILE) {\
@@ -1393,6 +1408,8 @@
   fprintf (FILE, "\n");\
 }  \
} while (0)
+/* LLVM LOCAL */
+#endif /*ENABLE_LLVM*/
 
 #define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \
 do {   \

Modified: llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp?rev=46042&r1=46041&r2=46042&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp (original)
+++ llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp Tue Jan 15 19:19:03 2008
@@ -1212,14 +1212,12 @@
 // llvm_emit_file_scope_asm - Emit the specified string as a file-scope inline
 // asm block.
 //
-void llvm_emit_file_scope_asm(tree string) {
-  if (TREE_CODE(string) == ADDR_EXPR)
-string = TREE_OPERAND(string, 0);
+void llvm_emit_file_scope_asm(const char *string) {
   if (TheModule->getModuleInlineAsm().empty())
-TheModule->setModuleInlineAsm(TREE_STRING_POINTER(string));
+TheModule->setModuleInlineAsm(string);
   else
 TheModule->setModuleInlineAsm(TheModule->getModuleInlineAsm() + "\n" +
-  TREE_STRING_POINTER(string));
+  string);
 }
 
 

Modified: llvm-gcc-4.0/trunk/gcc/llvm.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm.h?rev=46042&r1=46041&r2=46042&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/llvm.h (original)
+++ llvm-gcc-4.0/trunk/gcc/llvm.h Tue Jan 15 19:19:03 2008
@@ -73,7 +73,7 @@
 /* llvm_emit_file_scope_asm - Emit the specified string as a file-scope inline
  * asm block.
  */
-void llvm_emit_file_scope_asm(union tree_node*);
+void llvm_emit_file_scope_asm(const char*);
 
 /* llvm_emit_typedef - Emit the specified TYPE_DECL if desired.
  */

Modified: llvm-gcc-4.0/trunk/gcc/objc/objc-act.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/objc/objc-act.c?rev=46042&r1=46041&r2=46042&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/objc/objc-act.c (original)
+++ llvm-gcc-4.0/trunk/gcc/objc/objc-act.c Tue Jan 15 19:19:03 2008
@@ -18365,11 +18365,7 @@
 #ifdef ASM_DECLARE_UNRESOLVED_REFERENCE
   if (flag_next_runtime)
 {
-  /* APPLE LOCAL begin LLVM */
-#ifdef ENABLE_LLVM
   ASM_DECLARE_UNRESOLVED_REFERENCE (asm_out_file, string);
-#endif
-  /* APPLE LOCAL end LLVM */
   return;
 }
 #endif

Modified: llvm-gcc-4.0/trunk/gcc/varasm.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/varasm.c

[llvm-commits] [llvm-gcc-4.2] r46039 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

2008-01-15 Thread Bill Wendling
Author: void
Date: Tue Jan 15 18:47:01 2008
New Revision: 46039

URL: http://llvm.org/viewvc/llvm-project?rev=46039&view=rev
Log:
If we are building a compiler for target T on host H, and H has a different type
of endianness than T, then the builtin defines are generated incorrectly. For
instance, a compiler built on an X86 machine to target a PPC machine will
generate something like:

#define __FLT_MIN__ $.7507968736537456778186655567717873896992796e-52F

when run on the PPC machine. Instead, it should generate something like:

#define __FLT_MIN__ 1.17549435e-38F

This flips the bytes if the endianness doesn't match. Note, this doesn't apply
to long doubles. Those are (potentially) trickier.

Modified:
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=46039&r1=46038&r2=46039&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Tue Jan 15 18:47:01 2008
@@ -5466,6 +5466,14 @@
 double V;
   };
   if (Ty==Type::FloatTy || Ty==Type::DoubleTy) {
+// Determine endianness of host machine.
+union {
+  int x;
+  char y[sizeof(int)];
+} u;
+u.x = 1;
+bool BigEndian = (u.y[0] != 1);
+
 REAL_VALUE_TO_TARGET_DOUBLE(TREE_REAL_CST(exp), RealArr);
 
 // Here's how this works:
@@ -5477,16 +5485,21 @@
 // This, then, makes the conversion pretty simple.  The tricky part is
 // getting the byte ordering correct and make sure you don't print any
 // more than 32 bits per integer on platforms with ints > 32 bits.
-
-UArr[0] = RealArr[0];   // Long -> int convert
-UArr[1] = RealArr[1];
-
+// 
 // We want to switch the words of UArr if host and target endianness 
 // do not match.  FLOAT_WORDS_BIG_ENDIAN describes the target endianness.
 // The host's used to be available in HOST_WORDS_BIG_ENDIAN, but the gcc
 // maintainers removed this in a fit of cleanliness between 4.0 
 // and 4.2. For now, host and target endianness must match.
 
+if (BigEndian == FLOAT_WORDS_BIG_ENDIAN) {
+  UArr[0] = RealArr[0];   // Long -> int convert
+  UArr[1] = RealArr[1];
+} else {
+  UArr[0] = RealArr[1];   // Long -> int convert
+  UArr[1] = RealArr[0];
+}
+
 return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat((float)V)
  : APFloat(V));
   } else if (Ty==Type::X86_FP80Ty) {


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm-gcc-4.2] r46041 - in /llvm-gcc-4.2/trunk/gcc: config/darwin.h llvm-backend.cpp llvm.h objc/objc-act.c varasm.c

2008-01-15 Thread Bill Wendling
On Jan 15, 2008 5:15 PM, Chris Lattner <[EMAIL PROTECTED]> wrote:
> Author: lattner
> Date: Tue Jan 15 19:15:26 2008
> New Revision: 46041
>
> URL: http://llvm.org/viewvc/llvm-project?rev=46041&view=rev
> Log:
> The final ultimate(?) fix for the silly objc .reference thing.  Instead of 
> ignoring
> them, we now queue them up as a file-scope inline asm block.  This allows us 
> to
> emit the same directives as gcc.
>
*crosses fingers*

==
> --- llvm-gcc-4.2/trunk/gcc/config/darwin.h (original)
> +++ llvm-gcc-4.2/trunk/gcc/config/darwin.h Tue Jan 15 19:15:26 2008
> @@ -920,7 +920,22 @@
>  #undef  TARGET_ASM_RELOC_RW_MASK
>  #define TARGET_ASM_RELOC_RW_MASK machopic_reloc_rw_mask
>
> -
> +/* LLVM LOCAL begin */
> +#ifdef ENABLE_LLVM
> +#define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME)\
> +do {   \
> +if (FILE) {\
> +   char Buffer[strlen(NAME)+30];   \
> +   sprintf(Buffer, "\t.lazy_reference %s", NAME);  \

Why do you have this line here?

> +  if (MACHOPIC_INDIRECT)   \
> + sprintf(Buffer, "\t.lazy_reference %s", NAME);\
> +  else \
> + sprintf(Buffer, "\t.reference %s", NAME); \
> +  llvm_emit_file_scope_asm(Buffer);\
> +}  \
> +   } while (0)

-bw
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46043 - /llvm/tags/Apple/llvmCore-2008/

2008-01-15 Thread Bill Wendling
Author: void
Date: Tue Jan 15 19:30:13 2008
New Revision: 46043

URL: http://llvm.org/viewvc/llvm-project?rev=46043&view=rev
Log:
Creating llvmCore-2008 branch

Added:
llvm/tags/Apple/llvmCore-2008/
  - copied from r46042, llvm/trunk/

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r46044 - /llvm-gcc-4.2/tags/Apple/llvmgcc42-2008/

2008-01-15 Thread Bill Wendling
Author: void
Date: Tue Jan 15 19:31:37 2008
New Revision: 46044

URL: http://llvm.org/viewvc/llvm-project?rev=46044&view=rev
Log:
Creating llvmgcc42-2008 branch

Added:
llvm-gcc-4.2/tags/Apple/llvmgcc42-2008/
  - copied from r46043, llvm-gcc-4.2/trunk/

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46045 - in /llvm/trunk: lib/Transforms/IPO/StripSymbols.cpp test/Transforms/StripSymbols/ test/Transforms/StripSymbols/2007-01-15-llvm.used.ll test/Transforms/StripSymbols/Outpu

2008-01-15 Thread Devang Patel
Author: dpatel
Date: Tue Jan 15 21:33:05 2008
New Revision: 46045

URL: http://llvm.org/viewvc/llvm-project?rev=46045&view=rev
Log:
Do not strip llvm.used values.

Added:
llvm/trunk/test/Transforms/StripSymbols/
llvm/trunk/test/Transforms/StripSymbols/2007-01-15-llvm.used.ll
llvm/trunk/test/Transforms/StripSymbols/Output/
llvm/trunk/test/Transforms/StripSymbols/dg.exp
Modified:
llvm/trunk/lib/Transforms/IPO/StripSymbols.cpp

Modified: llvm/trunk/lib/Transforms/IPO/StripSymbols.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/StripSymbols.cpp?rev=46045&r1=46044&r2=46045&view=diff

==
--- llvm/trunk/lib/Transforms/IPO/StripSymbols.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/StripSymbols.cpp Tue Jan 15 21:33:05 2008
@@ -29,6 +29,7 @@
 #include "llvm/ValueSymbolTable.h"
 #include "llvm/TypeSymbolTable.h"
 #include "llvm/Support/Compiler.h"
+#include "llvm/ADT/SmallPtrSet.h"
 using namespace llvm;
 
 namespace {
@@ -100,13 +101,34 @@
   // If we're not just stripping debug info, strip all symbols from the
   // functions and the names from any internal globals.
   if (!OnlyDebugInfo) {
+SmallPtrSet llvmUsedValues;
+Value *LLVMUsed = M.getValueSymbolTable().lookup("llvm.used");
+if (LLVMUsed) {
+  // Collect values that are preserved as per explicit request.
+  // llvm.used is used to list these values.
+  if (GlobalVariable *GV = dyn_cast(LLVMUsed)) {
+if (ConstantArray *InitList = 
+dyn_cast(GV->getInitializer())) {
+  for (unsigned i = 0, e = InitList->getNumOperands(); i != e; ++i) {
+if (ConstantExpr *CE = 
+dyn_cast(InitList->getOperand(i)))
+  if (CE->isCast())
+llvmUsedValues.insert(CE->getOperand(0));
+  }
+}
+  }
+}
+
 for (Module::global_iterator I = M.global_begin(), E = M.global_end();
- I != E; ++I)
-  if (I->hasInternalLinkage())
+ I != E; ++I) {
+  if (I->hasInternalLinkage() && llvmUsedValues.count(I) == 0)
 I->setName(""); // Internal symbols can't participate in linkage
+  else if (I->getName() == "llvm.used") {
+  }
+}
 
 for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
-  if (I->hasInternalLinkage())
+  if (I->hasInternalLinkage() && llvmUsedValues.count(I) == 0)
 I->setName(""); // Internal symbols can't participate in linkage
   StripSymtab(I->getValueSymbolTable());
 }

Added: llvm/trunk/test/Transforms/StripSymbols/2007-01-15-llvm.used.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/StripSymbols/2007-01-15-llvm.used.ll?rev=46045&view=auto

==
--- llvm/trunk/test/Transforms/StripSymbols/2007-01-15-llvm.used.ll (added)
+++ llvm/trunk/test/Transforms/StripSymbols/2007-01-15-llvm.used.ll Tue Jan 15 
21:33:05 2008
@@ -0,0 +1,15 @@
+; RUN: llvm-as < %s | opt -strip | llvm-dis | grep foo | count 2
+; RUN: llvm-as < %s | opt -strip | llvm-dis | grep bar | count 2
[EMAIL PROTECTED] = appending global [2 x i8*] [ i8* bitcast (i32* @foo to 
i8*), i8* bitcast (i32 ()* @bar to i8*) ], section "llvm.metadata"   ; 
<[2 x i8*]*> [#uses=0]
[EMAIL PROTECTED] = internal constant i32 41;  [#uses=1]
+
+define internal i32 @bar() nounwind  {
+entry:
+   ret i32 42
+}
+
+define i32 @main() nounwind  {
+entry:
+   ret i32 0
+}
+

Added: llvm/trunk/test/Transforms/StripSymbols/dg.exp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/StripSymbols/dg.exp?rev=46045&view=auto

==
--- llvm/trunk/test/Transforms/StripSymbols/dg.exp (added)
+++ llvm/trunk/test/Transforms/StripSymbols/dg.exp Tue Jan 15 21:33:05 2008
@@ -0,0 +1,3 @@
+load_lib llvm.exp
+
+RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,llx,c,cpp,tr}]]


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r46046 - /llvm-gcc-4.2/trunk/gcc/config/darwin.h

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 21:53:20 2008
New Revision: 46046

URL: http://llvm.org/viewvc/llvm-project?rev=46046&view=rev
Log:
remove a dead line, thanks to bill for pointing this out.

Modified:
llvm-gcc-4.2/trunk/gcc/config/darwin.h

Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/darwin.h?rev=46046&r1=46045&r2=46046&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/config/darwin.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/darwin.h Tue Jan 15 21:53:20 2008
@@ -926,7 +926,6 @@
 do {   \
 if (FILE) {\
char Buffer[strlen(NAME)+30];   \
-   sprintf(Buffer, "\t.lazy_reference %s", NAME);  \
   if (MACHOPIC_INDIRECT)   \
  sprintf(Buffer, "\t.lazy_reference %s", NAME);\
   else \


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.0] r46047 - /llvm-gcc-4.0/trunk/gcc/config/darwin.h

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 21:54:18 2008
New Revision: 46047

URL: http://llvm.org/viewvc/llvm-project?rev=46047&view=rev
Log:
remove a dead line, thanks to bill for pointing this out.

Modified:
llvm-gcc-4.0/trunk/gcc/config/darwin.h

Modified: llvm-gcc-4.0/trunk/gcc/config/darwin.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/config/darwin.h?rev=46047&r1=46046&r2=46047&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/config/darwin.h (original)
+++ llvm-gcc-4.0/trunk/gcc/config/darwin.h Tue Jan 15 21:54:18 2008
@@ -1387,7 +1387,6 @@
 do {   \
 if (FILE) {\
char Buffer[strlen(NAME)+30];   \
-   sprintf(Buffer, "\t.lazy_reference %s", NAME);  \
   if (MACHOPIC_INDIRECT)   \
  sprintf(Buffer, "\t.lazy_reference %s", NAME);\
   else \


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r46045 - in /llvm/trunk: lib/Transforms/IPO/StripSymbols.cpp test/Transforms/StripSymbols/ test/Transforms/StripSymbols/2007-01-15-llvm.used.ll test/Transforms/StripSymbols/O

2008-01-15 Thread Chris Lattner
On Jan 15, 2008, at 7:33 PM, Devang Patel wrote:
> URL: http://llvm.org/viewvc/llvm-project?rev=46045&view=rev
> Log:
> Do not strip llvm.used values.

Nice catch,

-Chris
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] Fix for PR1798 (ScalarEvolution)

2008-01-15 Thread Chris Lattner

On Jan 15, 2008, at 1:36 PM, Wojciech Matyjewicz wrote:

> The attached patch should fix the aforementioned bug. It passes  
> DejaGnu
> testsuite. Nick also checked that it passes llvm-test and llvm-gcc
> bootstrap (thanks!).

Oooh cool!

>
> The patch:
> 1) changes SCEVSDivExpr into SCEVUDivExpr,
> 2) replaces PartialFact() function with BinomialCoefficient(); the
> computations in BinomialCoefficient() are performed with the  
> apprioprate
> bitwidth necessary to avoid overflow.
>
> The short explanation why the patch should be correct is contained in
> the comments. The longer can be found in the bugzilla discussion:
> http://llvm.org/bugs/show_bug.cgi?id=1798.
>
> However, there is one problem. The fix needs support for integers of
> arbitrary bitwitdth to work in every possible case. Here is a short
> explanation why:
> To evaluate a chrec of length K at a given iteration we need, in
> general, to generate LLVM code performing accurate multiplication of K
> numbers. Suppose, W is their bitwidth. Then, multiplication need to  
> use
> K*W bits, what can potentially be an arbitrary number.
>
> I can see two ways what we can do now:
> 1) wait for the backend support,
> 2) make the patch unoptimal by using the more bits than needed to
> perform the multiplication (the minimum power of 2 greater or equal  
> to K*W)

I think we should wait to address this after LLVM 2.2 branches.  That  
said, the short-term fix is to round up to the next power of two (e.g.  
32 or 64 bits) and disable this transformation when that size is not a  
"normal" llvm size (8, 16, 32, 64).

Hopefully llvm 2.3 will have real APInt support in the code generator,  
at which time we can remove these hacks. :)

Does this sound reasonable?

-Chris
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r46048 - /llvm-gcc-4.2/tags/Apple/llvmgcc42-2008/trunk/

2008-01-15 Thread Bill Wendling
Author: void
Date: Tue Jan 15 23:46:33 2008
New Revision: 46048

URL: http://llvm.org/viewvc/llvm-project?rev=46048&view=rev
Log:
Creating llvmgcc42-2008 branch

Added:
llvm-gcc-4.2/tags/Apple/llvmgcc42-2008/trunk/
  - copied from r46047, llvm-gcc-4.2/trunk/

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46050 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAGNodes.h lib/CodeGen/SelectionDAG/DAGCombiner.cpp lib/CodeGen/SelectionDAG/SelectionDAG.cpp

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 23:49:24 2008
New Revision: 46050

URL: http://llvm.org/viewvc/llvm-project?rev=46050&view=rev
Log:
Factor the ReachesChainWithoutSideEffects out of dag combiner into 
a public SDOperand::reachesChainWithoutSideEffects method.  No 
functionality change.

Modified:
llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h
llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=46050&r1=46049&r2=46050&view=diff

==
--- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original)
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Tue Jan 15 23:49:24 2008
@@ -780,6 +780,14 @@
   inline bool isTargetOpcode() const;
   inline unsigned getTargetOpcode() const;
 
+  
+  /// reachesChainWithoutSideEffects - Return true if this operand (which must
+  /// be a chain) reaches the specified operand without crossing any 
+  /// side-effecting instructions.  In practice, this looks through token
+  /// factors and non-volatile loads.  In order to remain efficient, this only
+  /// looks a couple of nodes in, it does not do an exhaustive search.
+  bool reachesChainWithoutSideEffects(SDOperand Dest, unsigned Depth = 2) 
const;
+  
   /// hasOneUse - Return true if there is exactly one operation using this
   /// result value of the defining operator.
   inline bool hasOneUse() const;

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=46050&r1=46049&r2=46050&view=diff

==
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Tue Jan 15 23:49:24 2008
@@ -4122,33 +4122,6 @@
   return SDOperand();
 }
 
-/// ReachesChainWithoutSideEffects - Do a little local search to see if Src can
-/// reach Dest without any side effects like a store, or call.  Non-volatile
-/// loads are ok though.
-static bool ReachesChainWithoutSideEffects(SDOperand Src, SDOperand Dest,
-   unsigned Depth = 0) {
-  if (Src == Dest) return true;
-  
-  // Don't search too deeply, we just want to be able to see through
-  // TokenFactor's etc.
-  if (Depth == 2) return false;
-  
-  // If this is a token factor, all inputs to the TF happen in parallel.  If 
any
-  // of the operands of the TF reach dest, then we can do the xform.
-  if (Src.getOpcode() == ISD::TokenFactor) {
-for (unsigned i = 0, e = Src.getNumOperands(); i != e; ++i)
-  if (ReachesChainWithoutSideEffects(Src.getOperand(i), Dest, Depth+1))
-return true;
-return false;
-  }
-  
-  // Loads don't have side effects, look through them.
-  if (LoadSDNode *Ld = dyn_cast(Src)) {
-if (!Ld->isVolatile())
-  return ReachesChainWithoutSideEffects(Ld->getChain(), Dest, Depth+1);
-  }
-  return false;
-}
 
 SDOperand DAGCombiner::visitSTORE(SDNode *N) {
   StoreSDNode *ST  = cast(N);
@@ -4283,7 +4256,7 @@
 !ST->isVolatile() &&
 // There can't be any side effects between the load and store, such as
 // a call or store.
-ReachesChainWithoutSideEffects(Chain, SDOperand(Ld, 1))) {
+Chain.reachesChainWithoutSideEffects(SDOperand(Ld, 1))) {
   // The store is dead, remove it.
   return Chain;
 }

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=46050&r1=46049&r2=46050&view=diff

==
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Tue Jan 15 23:49:24 
2008
@@ -3562,6 +3562,37 @@
   return false;
 }
 
+/// reachesChainWithoutSideEffects - Return true if this operand (which must
+/// be a chain) reaches the specified operand without crossing any 
+/// side-effecting instructions.  In practice, this looks through token
+/// factors and non-volatile loads.  In order to remain efficient, this only
+/// looks a couple of nodes in, it does not do an exhaustive search.
+bool SDOperand::reachesChainWithoutSideEffects(SDOperand Dest, 
+   unsigned Depth) const {
+  if (*this == Dest) return true;
+  
+  // Don't search too deeply, we just want to be able to see through
+  // TokenFactor's etc.
+  if (Depth == 0) return false;
+  
+  // If this is a token factor, all inputs to the TF happen in parallel.  If 
any
+  // of the operands of the TF reach dest, then we can do the xform.
+  if (getOpcode() == ISD::TokenFactor) {
+ 

[llvm-commits] [llvm] r46052 - /llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 23:52:18 2008
New Revision: 46052

URL: http://llvm.org/viewvc/llvm-project?rev=46052&view=rev
Log:
various whitespace cleanups, no functionality change.

Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=46052&r1=46051&r2=46052&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Tue Jan 15 23:52:18 2008
@@ -683,16 +683,16 @@
 /// GetPossiblePreceedingTailCall - Get preceeding X86ISD::TAILCALL node if it
 /// exists skip possible ISD:TokenFactor.
 static SDOperand GetPossiblePreceedingTailCall(SDOperand Chain) {
-  if (Chain.getOpcode()==X86ISD::TAILCALL) {
+  if (Chain.getOpcode() == X86ISD::TAILCALL) {
 return Chain;
-  } else if (Chain.getOpcode()==ISD::TokenFactor) {
+  } else if (Chain.getOpcode() == ISD::TokenFactor) {
 if (Chain.getNumOperands() &&
-Chain.getOperand(0).getOpcode()==X86ISD::TAILCALL)
+Chain.getOperand(0).getOpcode() == X86ISD::TAILCALL)
   return Chain.getOperand(0);
   }
   return Chain;
 }
-
+
 /// LowerRET - Lower an ISD::RET node.
 SDOperand X86TargetLowering::LowerRET(SDOperand Op, SelectionDAG &DAG) {
   assert((Op.getNumOperands() & 1) == 1 && "ISD::RET should have odd # args");
@@ -718,14 +718,14 @@
 SDOperand TailCall = Chain;
 SDOperand TargetAddress = TailCall.getOperand(1);
 SDOperand StackAdjustment = TailCall.getOperand(2);
-assert ( ((TargetAddress.getOpcode() == ISD::Register &&
+assert(((TargetAddress.getOpcode() == ISD::Register &&
(cast(TargetAddress)->getReg() == X86::ECX ||
 cast(TargetAddress)->getReg() == X86::R9)) ||
   TargetAddress.getOpcode() == ISD::TargetExternalSymbol ||
   TargetAddress.getOpcode() == ISD::TargetGlobalAddress) && 
  "Expecting an global address, external symbol, or register");
-assert( StackAdjustment.getOpcode() == ISD::Constant &&
-"Expecting a const value");
+assert(StackAdjustment.getOpcode() == ISD::Constant &&
+   "Expecting a const value");
 
 SmallVector Operands;
 Operands.push_back(Chain.getOperand(0));


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46053 - /llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 23:53:06 2008
New Revision: 46053

URL: http://llvm.org/viewvc/llvm-project?rev=46053&view=rev
Log:
make the 'fp return in ST(0)' optimization smart enough to 
look through token factor

Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=46053&r1=46052&r2=46053&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Tue Jan 15 23:53:06 2008
@@ -767,7 +767,7 @@
   // If this is a load into a scalarsse value, don't store the loaded value
   // back to the stack, only to reload it: just replace the scalar-sse 
load.
   if (ISD::isNON_EXTLoad(Value.Val) &&
-  (Chain == Value.getValue(1) || Chain == Value.getOperand(0))) {
+  Chain.reachesChainWithoutSideEffects(Value.getOperand(0))) {
 Chain  = Value.getOperand(0);
 MemLoc = Value.getOperand(1);
   } else {


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46054 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp test/CodeGen/X86/fp-stack-retcopy.ll

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Tue Jan 15 23:56:59 2008
New Revision: 46054

URL: http://llvm.org/viewvc/llvm-project?rev=46054&view=rev
Log:
My previous commit had an incomplete message, it should have been:

make the 'fp return in ST(0)' optimization smart enough to
look through token factor nodes.  THis allows us to compile 
testcases like CodeGen/X86/fp-stack-retcopy.ll into:

_carg:
subl$12, %esp
callL_foo$stub
fstpl   (%esp)
fldl(%esp)
addl$12, %esp
ret

instead of:

_carg:
subl$28, %esp
callL_foo$stub
fstpl   16(%esp)
movsd   16(%esp), %xmm0
movsd   %xmm0, 8(%esp)
fldl8(%esp)
addl$28, %esp
ret

Still not optimal, but much better and this is a trivial patch.  Fixing 
the rest requires invasive surgery that is is not llvm 2.2 material.


Added:
llvm/trunk/test/CodeGen/X86/fp-stack-retcopy.ll
Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=46054&r1=46053&r2=46054&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Tue Jan 15 23:56:59 2008
@@ -767,7 +767,7 @@
   // If this is a load into a scalarsse value, don't store the loaded value
   // back to the stack, only to reload it: just replace the scalar-sse 
load.
   if (ISD::isNON_EXTLoad(Value.Val) &&
-  Chain.reachesChainWithoutSideEffects(Value.getOperand(0))) {
+   Chain.reachesChainWithoutSideEffects(Value.getOperand(0))) {
 Chain  = Value.getOperand(0);
 MemLoc = Value.getOperand(1);
   } else {

Added: llvm/trunk/test/CodeGen/X86/fp-stack-retcopy.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fp-stack-retcopy.ll?rev=46054&view=auto

==
--- llvm/trunk/test/CodeGen/X86/fp-stack-retcopy.ll (added)
+++ llvm/trunk/test/CodeGen/X86/fp-stack-retcopy.ll Tue Jan 15 23:56:59 2008
@@ -0,0 +1,12 @@
+; This should not copy the result of foo into an xmm register.
+; RUN: llvm-as < %s | llc -march=x86 -mcpu=yonah -mtriple=i686-apple-darwin9 | 
not grep xmm
+; rdar://5689903
+
+declare double @foo()
+
+define double @carg({ double, double }* byval  %z) nounwind  {
+entry:
+   %tmp5 = tail call double @foo() nounwind;  
[#uses=1]
+   ret double %tmp5
+}
+


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46055 - in /llvm/trunk/lib/Target/X86: X86ISelLowering.cpp X86ISelLowering.h

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Wed Jan 16 00:19:45 2008
New Revision: 46055

URL: http://llvm.org/viewvc/llvm-project?rev=46055&view=rev
Log:
introduce a isTypeInSSEReg predicate, which allows us to simplify
some code.  No functionality change.

Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/lib/Target/X86/X86ISelLowering.h

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=46055&r1=46054&r2=46055&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Jan 16 00:19:45 2008
@@ -760,8 +760,7 @@
 
 // If this is an FP return with ScalarSSE, we need to move the value from
 // an XMM register onto the fp-stack.
-if ((X86ScalarSSEf32 && RVLocs[0].getValVT()==MVT::f32) ||
-(X86ScalarSSEf64 && RVLocs[0].getValVT()==MVT::f64)) {
+if (isTypeInSSEReg(RVLocs[0].getValVT())) {
   SDOperand MemLoc;
 
   // If this is a load into a scalarsse value, don't store the loaded value
@@ -836,8 +835,7 @@
 
 // If we are using ScalarSSE, store ST(0) to the stack and reload it into
 // an XMM register.
-if ((X86ScalarSSEf32 && RVLocs[0].getValVT() == MVT::f32) ||
-(X86ScalarSSEf64 && RVLocs[0].getValVT() == MVT::f64)) {
+if (isTypeInSSEReg(RVLocs[0].getValVT())) {
   SDOperand StoreLoc;
   const Value *SrcVal = 0;
   int SrcValOffset = 0;
@@ -3862,18 +3860,15 @@
  StackSlot, NULL, 0);
 
   // These are really Legal; caller falls through into that case.
-  if (SrcVT==MVT::i32 && Op.getValueType() == MVT::f32 && X86ScalarSSEf32)
+  if (SrcVT == MVT::i32 && isTypeInSSEReg(Op.getValueType()))
 return Result;
-  if (SrcVT==MVT::i32 && Op.getValueType() == MVT::f64 && X86ScalarSSEf64)
-return Result;
-  if (SrcVT==MVT::i64 && Op.getValueType() != MVT::f80 && 
+  if (SrcVT == MVT::i64 && Op.getValueType() != MVT::f80 && 
   Subtarget->is64Bit())
 return Result;
 
   // Build the FILD
   SDVTList Tys;
-  bool useSSE = (X86ScalarSSEf32 && Op.getValueType() == MVT::f32) ||
-(X86ScalarSSEf64 && Op.getValueType() == MVT::f64);
+  bool useSSE = isTypeInSSEReg(Op.getValueType());
   if (useSSE)
 Tys = DAG.getVTList(MVT::f64, MVT::Other, MVT::Flag);
   else
@@ -3916,10 +3911,7 @@
 
   // These are really Legal.
   if (Op.getValueType() == MVT::i32 && 
-  X86ScalarSSEf32 && Op.getOperand(0).getValueType() == MVT::f32)
-return std::make_pair(SDOperand(), SDOperand());
-  if (Op.getValueType() == MVT::i32 && 
-  X86ScalarSSEf64 && Op.getOperand(0).getValueType() == MVT::f64)
+  isTypeInSSEReg(Op.getOperand(0).getValueType()))
 return std::make_pair(SDOperand(), SDOperand());
   if (Subtarget->is64Bit() &&
   Op.getValueType() == MVT::i64 &&
@@ -3942,8 +3934,7 @@
 
   SDOperand Chain = DAG.getEntryNode();
   SDOperand Value = Op.getOperand(0);
-  if ((X86ScalarSSEf32 && Op.getOperand(0).getValueType() == MVT::f32) ||
-  (X86ScalarSSEf64 && Op.getOperand(0).getValueType() == MVT::f64)) {
+  if (isTypeInSSEReg(Op.getOperand(0).getValueType())) {
 assert(Op.getValueType() == MVT::i64 && "Invalid FP_TO_SINT to lower!");
 Chain = DAG.getStore(Chain, Value, StackSlot, NULL, 0);
 SDVTList Tys = DAG.getVTList(Op.getOperand(0).getValueType(), MVT::Other);
@@ -4172,13 +4163,12 @@
 SDOperand Cmp = Cond.getOperand(1);
 unsigned Opc = Cmp.getOpcode();
 MVT::ValueType VT = Op.getValueType();
+
 bool IllegalFPCMov = false;
-if (VT == MVT::f32 && !X86ScalarSSEf32)
-  IllegalFPCMov = !hasFPCMov(cast(CC)->getSignExtended());
-else if (VT == MVT::f64 && !X86ScalarSSEf64)
-  IllegalFPCMov = !hasFPCMov(cast(CC)->getSignExtended());
-else if (VT == MVT::f80)
+if (MVT::isFloatingPoint(VT) && !MVT::isVector(VT) &&
+!isTypeInSSEReg(VT))  // FPStack?
   IllegalFPCMov = !hasFPCMov(cast(CC)->getSignExtended());
+
 if ((Opc == X86ISD::CMP ||
  Opc == X86ISD::COMI ||
  Opc == X86ISD::UCOMI) && !IllegalFPCMov) {

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=46055&r1=46054&r2=46055&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.h (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.h Wed Jan 16 00:19:45 2008
@@ -425,6 +425,13 @@
 /// When SSE2 is available, use it for f64 operations.
 bool X86ScalarSSEf32;
 bool X86ScalarSSEf64;
+
+/// isTypeInSSEReg - Return true if the specified scalar FP type is 
computed
+/// in an SSE register, not on the X87 floating point stack.
+bool isTypeInSSEReg(MVT::ValueType VT) const {
+  return (VT == 

[llvm-commits] [llvm-gcc-4.2] r46056 - /llvm-gcc-4.2/trunk/gcc/config/darwin.h

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Wed Jan 16 00:22:04 2008
New Revision: 46056

URL: http://llvm.org/viewvc/llvm-project?rev=46056&view=rev
Log:
VLA's aren't c90, use alloca instead.

Modified:
llvm-gcc-4.2/trunk/gcc/config/darwin.h

Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/darwin.h?rev=46056&r1=46055&r2=46056&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/config/darwin.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/darwin.h Wed Jan 16 00:22:04 2008
@@ -925,7 +925,7 @@
 #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME)\
 do {   \
 if (FILE) {\
-   char Buffer[strlen(NAME)+30];   \
+   char *Buffer = alloca(strlen(NAME)+30); \
   if (MACHOPIC_INDIRECT)   \
  sprintf(Buffer, "\t.lazy_reference %s", NAME);\
   else \


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.0] r46057 - /llvm-gcc-4.0/trunk/gcc/config/darwin.h

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Wed Jan 16 00:22:21 2008
New Revision: 46057

URL: http://llvm.org/viewvc/llvm-project?rev=46057&view=rev
Log:
vla's aren't C90, use alloca instead.

Modified:
llvm-gcc-4.0/trunk/gcc/config/darwin.h

Modified: llvm-gcc-4.0/trunk/gcc/config/darwin.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/config/darwin.h?rev=46057&r1=46056&r2=46057&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/config/darwin.h (original)
+++ llvm-gcc-4.0/trunk/gcc/config/darwin.h Wed Jan 16 00:22:21 2008
@@ -1386,7 +1386,7 @@
 #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME)\
 do {   \
 if (FILE) {\
-   char Buffer[strlen(NAME)+30];   \
+   char *Buffer = alloca(strlen(NAME)+30); \
   if (MACHOPIC_INDIRECT)   \
  sprintf(Buffer, "\t.lazy_reference %s", NAME);\
   else \


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46058 - in /llvm/trunk/lib/Target/X86: X86ISelLowering.cpp X86ISelLowering.h

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Wed Jan 16 00:24:21 2008
New Revision: 46058

URL: http://llvm.org/viewvc/llvm-project?rev=46058&view=rev
Log:
make it more clear that this predicate only applies to scalar FP types.

Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/lib/Target/X86/X86ISelLowering.h

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=46058&r1=46057&r2=46058&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Jan 16 00:24:21 2008
@@ -760,7 +760,7 @@
 
 // If this is an FP return with ScalarSSE, we need to move the value from
 // an XMM register onto the fp-stack.
-if (isTypeInSSEReg(RVLocs[0].getValVT())) {
+if (isScalarFPTypeInSSEReg(RVLocs[0].getValVT())) {
   SDOperand MemLoc;
 
   // If this is a load into a scalarsse value, don't store the loaded value
@@ -835,7 +835,7 @@
 
 // If we are using ScalarSSE, store ST(0) to the stack and reload it into
 // an XMM register.
-if (isTypeInSSEReg(RVLocs[0].getValVT())) {
+if (isScalarFPTypeInSSEReg(RVLocs[0].getValVT())) {
   SDOperand StoreLoc;
   const Value *SrcVal = 0;
   int SrcValOffset = 0;
@@ -3860,7 +3860,7 @@
  StackSlot, NULL, 0);
 
   // These are really Legal; caller falls through into that case.
-  if (SrcVT == MVT::i32 && isTypeInSSEReg(Op.getValueType()))
+  if (SrcVT == MVT::i32 && isScalarFPTypeInSSEReg(Op.getValueType()))
 return Result;
   if (SrcVT == MVT::i64 && Op.getValueType() != MVT::f80 && 
   Subtarget->is64Bit())
@@ -3868,7 +3868,7 @@
 
   // Build the FILD
   SDVTList Tys;
-  bool useSSE = isTypeInSSEReg(Op.getValueType());
+  bool useSSE = isScalarFPTypeInSSEReg(Op.getValueType());
   if (useSSE)
 Tys = DAG.getVTList(MVT::f64, MVT::Other, MVT::Flag);
   else
@@ -3911,7 +3911,7 @@
 
   // These are really Legal.
   if (Op.getValueType() == MVT::i32 && 
-  isTypeInSSEReg(Op.getOperand(0).getValueType()))
+  isScalarFPTypeInSSEReg(Op.getOperand(0).getValueType()))
 return std::make_pair(SDOperand(), SDOperand());
   if (Subtarget->is64Bit() &&
   Op.getValueType() == MVT::i64 &&
@@ -3934,7 +3934,7 @@
 
   SDOperand Chain = DAG.getEntryNode();
   SDOperand Value = Op.getOperand(0);
-  if (isTypeInSSEReg(Op.getOperand(0).getValueType())) {
+  if (isScalarFPTypeInSSEReg(Op.getOperand(0).getValueType())) {
 assert(Op.getValueType() == MVT::i64 && "Invalid FP_TO_SINT to lower!");
 Chain = DAG.getStore(Chain, Value, StackSlot, NULL, 0);
 SDVTList Tys = DAG.getVTList(Op.getOperand(0).getValueType(), MVT::Other);
@@ -4166,7 +4166,7 @@
 
 bool IllegalFPCMov = false;
 if (MVT::isFloatingPoint(VT) && !MVT::isVector(VT) &&
-!isTypeInSSEReg(VT))  // FPStack?
+!isScalarFPTypeInSSEReg(VT))  // FPStack?
   IllegalFPCMov = !hasFPCMov(cast(CC)->getSignExtended());
 
 if ((Opc == X86ISD::CMP ||

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=46058&r1=46057&r2=46058&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.h (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.h Wed Jan 16 00:24:21 2008
@@ -426,9 +426,9 @@
 bool X86ScalarSSEf32;
 bool X86ScalarSSEf64;
 
-/// isTypeInSSEReg - Return true if the specified scalar FP type is 
computed
-/// in an SSE register, not on the X87 floating point stack.
-bool isTypeInSSEReg(MVT::ValueType VT) const {
+/// isScalarFPTypeInSSEReg - Return true if the specified scalar FP type is
+/// computed in an SSE register, not on the X87 floating point stack.
+bool isScalarFPTypeInSSEReg(MVT::ValueType VT) const {
   return (VT == MVT::f64 && X86ScalarSSEf64) || // f64 is when SSE2
  (VT == MVT::f32 && X86ScalarSSEf32);   // f32 is when SSE1
 }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r46059 - /llvm-gcc-4.2/tags/Apple/llvmgcc42-2009/

2008-01-15 Thread Bill Wendling
Author: void
Date: Wed Jan 16 00:27:12 2008
New Revision: 46059

URL: http://llvm.org/viewvc/llvm-project?rev=46059&view=rev
Log:
Creating llvmgcc42-2009 branch

Added:
llvm-gcc-4.2/tags/Apple/llvmgcc42-2009/
  - copied from r46058, llvm-gcc-4.2/trunk/

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46060 - /llvm/trunk/test/CodeGen/X86/fp-stack-ret-store.ll

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Wed Jan 16 00:32:02 2008
New Revision: 46060

URL: http://llvm.org/viewvc/llvm-project?rev=46060&view=rev
Log:
make sure to use a cpu that has sse.

Modified:
llvm/trunk/test/CodeGen/X86/fp-stack-ret-store.ll

Modified: llvm/trunk/test/CodeGen/X86/fp-stack-ret-store.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fp-stack-ret-store.ll?rev=46060&r1=46059&r2=46060&view=diff

==
--- llvm/trunk/test/CodeGen/X86/fp-stack-ret-store.ll (original)
+++ llvm/trunk/test/CodeGen/X86/fp-stack-ret-store.ll Wed Jan 16 00:32:02 2008
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | llc | not grep movss
+; RUN: llvm-as < %s | llc -mcpu=yonah | not grep movss
 target datalayout = 
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
 target triple = "i686-apple-darwin8"
 


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm-gcc-4.2] r46039 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

2008-01-15 Thread Anton Korobeynikov
Hello, Bill

> +if (BigEndian == FLOAT_WORDS_BIG_ENDIAN) {
> +  UArr[0] = RealArr[0];   // Long -> int convert
> +  UArr[1] = RealArr[1];
> +} else {
> +  UArr[0] = RealArr[1];   // Long -> int convert
> +  UArr[1] = RealArr[0];
> +}
> +
Why don't do just something like this:
UArr[0] = RealArr[0];   // Long -> int convert
UArr[1] = RealArr[1];

if (BigEndian == FLOAT_WORDS_BIG_ENDIAN)
  std::swap(UArr[0], UArr[1]);

This looks to me pretty much readable.
-- 
With best regards, Anton Korobeynikov
Faculty of Mathematics and Mechanics, Saint Petersburg State University
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46061 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Wed Jan 16 00:57:07 2008
New Revision: 46061

URL: http://llvm.org/viewvc/llvm-project?rev=46061&view=rev
Log:
Change legalizeop of FP_ROUND and FP_EXTEND  to not fall through
into the ANY_EXTEND/ZERO_EXTEND/SIGN_EXTEND code to simplify it.

Unmerge the code for FP_ROUND and FP_EXTEND from each other to 
make each one simpler.

Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=46061&r1=46060&r2=46061&view=diff

==
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed Jan 16 00:57:07 2008
@@ -3569,18 +3569,50 @@
 }
 break;
 
-  case ISD::FP_EXTEND: 
+  case ISD::FP_EXTEND: {
+  MVT::ValueType newVT = Op.getValueType();
+  MVT::ValueType oldVT = Op.getOperand(0).getValueType();
+  if (TLI.getConvertAction(oldVT, newVT) == TargetLowering::Expand) {
+// The only other way we can lower this is to turn it into a STORE,
+// LOAD pair, targetting a temporary location (a stack slot).
+
+// NOTE: there is a choice here between constantly creating new stack
+// slots and always reusing the same one.  We currently always create
+// new ones, as reuse may inhibit scheduling.
+const Type *Ty = MVT::getTypeForValueType(oldVT);
+uint64_t TySize = TLI.getTargetData()->getABITypeSize(Ty);
+unsigned Align  = TLI.getTargetData()->getPrefTypeAlignment(Ty);
+MachineFunction &MF = DAG.getMachineFunction();
+int SSFI =
+  MF.getFrameInfo()->CreateStackObject(TySize, Align);
+SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());
+Result = DAG.getStore(DAG.getEntryNode(), Node->getOperand(0),
+   StackSlot, NULL, 0);
+Result = DAG.getExtLoad(ISD::EXTLOAD, newVT,
+   Result, StackSlot, NULL, 0, oldVT);
+break;
+  }
+}
+switch (getTypeAction(Node->getOperand(0).getValueType())) {
+case Expand: assert(0 && "Shouldn't need to expand other operators here!");
+case Legal:
+  Tmp1 = LegalizeOp(Node->getOperand(0));
+  Result = DAG.UpdateNodeOperands(Result, Tmp1);
+  break;
+case Promote:
+  Tmp1 = PromoteOp(Node->getOperand(0));
+  Result = DAG.getNode(ISD::FP_EXTEND, Op.getValueType(), Tmp1);
+  break;
+}
+break;
   case ISD::FP_ROUND: {
   MVT::ValueType newVT = Op.getValueType();
   MVT::ValueType oldVT = Op.getOperand(0).getValueType();
   if (TLI.getConvertAction(oldVT, newVT) == TargetLowering::Expand) {
-if (Node->getOpcode() == ISD::FP_ROUND && oldVT == MVT::ppcf128) {
+if (oldVT == MVT::ppcf128) {
   SDOperand Lo, Hi;
   ExpandOp(Node->getOperand(0), Lo, Hi);
-  if (newVT == MVT::f64)
-Result = Hi;
-  else
-Result = DAG.getNode(ISD::FP_ROUND, newVT, Hi);
+  Result = DAG.getNode(ISD::FP_ROUND, newVT, Hi);
   break;
 } else {
   // The only other way we can lower this is to turn it into a STORE,
@@ -3589,30 +3621,31 @@
   // NOTE: there is a choice here between constantly creating new stack
   // slots and always reusing the same one.  We currently always create
   // new ones, as reuse may inhibit scheduling.
-  MVT::ValueType slotVT = 
-  (Node->getOpcode() == ISD::FP_EXTEND) ? oldVT : newVT;
-  const Type *Ty = MVT::getTypeForValueType(slotVT);
+  const Type *Ty = MVT::getTypeForValueType(newVT);
   uint64_t TySize = TLI.getTargetData()->getABITypeSize(Ty);
   unsigned Align  = TLI.getTargetData()->getPrefTypeAlignment(Ty);
   MachineFunction &MF = DAG.getMachineFunction();
-  int SSFI =
-MF.getFrameInfo()->CreateStackObject(TySize, Align);
+  int SSFI = MF.getFrameInfo()->CreateStackObject(TySize, Align);
   SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());
-  if (Node->getOpcode() == ISD::FP_EXTEND) {
-Result = DAG.getStore(DAG.getEntryNode(), Node->getOperand(0),
-   StackSlot, NULL, 0);
-Result = DAG.getExtLoad(ISD::EXTLOAD, newVT,
-   Result, StackSlot, NULL, 0, oldVT);
-  } else {
-Result = DAG.getTruncStore(DAG.getEntryNode(), Node->getOperand(0),
-   StackSlot, NULL, 0, newVT);
-Result = DAG.getLoad(newVT, Result, StackSlot, NULL, 0);
-  }
+  Result = DAG.getTruncStore(DAG.getEntryNode(), Node->getOperand(0),
+ StackSlot, NULL, 0, newVT);

[llvm-commits] [llvm] r46062 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Wed Jan 16 01:03:22 2008
New Revision: 46062

URL: http://llvm.org/viewvc/llvm-project?rev=46062&view=rev
Log:
simplify a bunch of code by using SelectionDAG::CreateStackTemporary 
instead of inlining its body.

Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=46062&r1=46061&r2=46062&view=diff

==
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed Jan 16 01:03:22 2008
@@ -3579,13 +3579,7 @@
 // NOTE: there is a choice here between constantly creating new stack
 // slots and always reusing the same one.  We currently always create
 // new ones, as reuse may inhibit scheduling.
-const Type *Ty = MVT::getTypeForValueType(oldVT);
-uint64_t TySize = TLI.getTargetData()->getABITypeSize(Ty);
-unsigned Align  = TLI.getTargetData()->getPrefTypeAlignment(Ty);
-MachineFunction &MF = DAG.getMachineFunction();
-int SSFI =
-  MF.getFrameInfo()->CreateStackObject(TySize, Align);
-SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());
+SDOperand StackSlot = DAG.CreateStackTemporary(oldVT);
 Result = DAG.getStore(DAG.getEntryNode(), Node->getOperand(0),
StackSlot, NULL, 0);
 Result = DAG.getExtLoad(ISD::EXTLOAD, newVT,
@@ -3621,12 +3615,7 @@
   // NOTE: there is a choice here between constantly creating new stack
   // slots and always reusing the same one.  We currently always create
   // new ones, as reuse may inhibit scheduling.
-  const Type *Ty = MVT::getTypeForValueType(newVT);
-  uint64_t TySize = TLI.getTargetData()->getABITypeSize(Ty);
-  unsigned Align  = TLI.getTargetData()->getPrefTypeAlignment(Ty);
-  MachineFunction &MF = DAG.getMachineFunction();
-  int SSFI = MF.getFrameInfo()->CreateStackObject(TySize, Align);
-  SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());
+  SDOperand StackSlot = DAG.CreateStackTemporary(newVT);
   Result = DAG.getTruncStore(DAG.getEntryNode(), Node->getOperand(0),
  StackSlot, NULL, 0, newVT);
   Result = DAG.getLoad(newVT, Result, StackSlot, NULL, 0);
@@ -3708,13 +3697,7 @@
 // NOTE: there is a choice here between constantly creating new stack
 // slots and always reusing the same one.  We currently always create
 // new ones, as reuse may inhibit scheduling.
-const Type *Ty = MVT::getTypeForValueType(ExtraVT);
-uint64_t TySize = TLI.getTargetData()->getABITypeSize(Ty);
-unsigned Align  = TLI.getTargetData()->getPrefTypeAlignment(Ty);
-MachineFunction &MF = DAG.getMachineFunction();
-int SSFI =
-  MF.getFrameInfo()->CreateStackObject(TySize, Align);
-SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());
+SDOperand StackSlot = DAG.CreateStackTemporary(ExtraVT);
 Result = DAG.getTruncStore(DAG.getEntryNode(), Node->getOperand(0),
StackSlot, NULL, 0, ExtraVT);
 Result = DAG.getExtLoad(ISD::EXTLOAD, Node->getValueType(0),
@@ -5070,14 +5053,9 @@
   if (Op0.getValueType() == MVT::i32) {
 // simple 32-bit [signed|unsigned] integer to float/double expansion
 
-// get the stack frame index of a 8 byte buffer, pessimistically aligned
-MachineFunction &MF = DAG.getMachineFunction();
-const Type *F64Type = MVT::getTypeForValueType(MVT::f64);
-unsigned StackAlign =
-  (unsigned)TLI.getTargetData()->getPrefTypeAlignment(F64Type);
-int SSFI = MF.getFrameInfo()->CreateStackObject(8, StackAlign);
-// get address of 8 byte buffer
-SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());
+// Get the stack frame index of a 8 byte buffer.
+SDOperand StackSlot = DAG.CreateStackTemporary(MVT::f64);
+
 // word offset constant for Hi/Lo address computation
 SDOperand WordOff = DAG.getConstant(sizeof(int), TLI.getPointerTy());
 // set up Hi and Lo (into buffer) address based on endian


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r46063 - /llvm-gcc-4.2/trunk/gcc/config/i386/i386-protos.h

2008-01-15 Thread Bill Wendling
Author: void
Date: Wed Jan 16 01:23:34 2008
New Revision: 46063

URL: http://llvm.org/viewvc/llvm-project?rev=46063&view=rev
Log:
Prototypes required.

Modified:
llvm-gcc-4.2/trunk/gcc/config/i386/i386-protos.h

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/i386-protos.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/i386-protos.h?rev=46063&r1=46062&r2=46063&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/config/i386/i386-protos.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/i386-protos.h Wed Jan 16 01:23:34 2008
@@ -255,3 +255,9 @@
 /* APPLE LOCAL 3399553 */
 extern void ix86_expand_flt_rounds (rtx);
 extern int asm_preferred_eh_data_format (int, int);
+
+/* LLVM LOCAL begin */
+enum machine_mode ix86_getNaturalModeForType(tree type);
+int ix86_HowToPassArgument(enum machine_mode mode, tree type, int in_return,
+   int *int_nregs, int *sse_nregs);
+/* LLVM LOCAL end */


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm-gcc-4.2] r46039 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

2008-01-15 Thread Bill Wendling
Hi Anton,

>> +if (BigEndian == FLOAT_WORDS_BIG_ENDIAN) {
>> +  UArr[0] = RealArr[0];   // Long -> int convert
>> +  UArr[1] = RealArr[1];
>> +} else {
>> +  UArr[0] = RealArr[1];   // Long -> int convert
>> +  UArr[1] = RealArr[0];
>> +}
>> +
> Why don't do just something like this:
> UArr[0] = RealArr[0];   // Long -> int convert
> UArr[1] = RealArr[1];
>
> if (BigEndian == FLOAT_WORDS_BIG_ENDIAN)
>   std::swap(UArr[0], UArr[1]);
>
> This looks to me pretty much readable.

Either way is fine. You're correct that your way is a bit more  
readable. Done.

-bw
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r46064 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

2008-01-15 Thread Bill Wendling
Author: void
Date: Wed Jan 16 01:28:16 2008
New Revision: 46064

URL: http://llvm.org/viewvc/llvm-project?rev=46064&view=rev
Log:
Simplify the code to make it more readable.

Modified:
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=46064&r1=46063&r2=46064&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Wed Jan 16 01:28:16 2008
@@ -5492,13 +5492,11 @@
 // maintainers removed this in a fit of cleanliness between 4.0 
 // and 4.2. For now, host and target endianness must match.
 
-if (BigEndian == FLOAT_WORDS_BIG_ENDIAN) {
-  UArr[0] = RealArr[0];   // Long -> int convert
-  UArr[1] = RealArr[1];
-} else {
-  UArr[0] = RealArr[1];   // Long -> int convert
-  UArr[1] = RealArr[0];
-}
+UArr[0] = RealArr[0];   // Long -> int convert
+UArr[1] = RealArr[1];
+
+if (BigEndian != FLOAT_WORDS_BIG_ENDIAN)
+  std::swap(UArr[0], UArr[1]);
 
 return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat((float)V)
  : APFloat(V));


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] Fix for PR1798 (ScalarEvolution)

2008-01-15 Thread Wojciech Matyjewicz
Chris Lattner wrote:
> I think we should wait to address this after LLVM 2.2 branches.  That  
> said, the short-term fix is to round up to the next power of two (e.g.  
> 32 or 64 bits) and disable this transformation when that size is not a  
> "normal" llvm size (8, 16, 32, 64).
> 
> Hopefully llvm 2.3 will have real APInt support in the code generator,  
> at which time we can remove these hacks. :)
> 
> Does this sound reasonable?

Yes, it does. I'll add the hacks and commit the patch after LLVM 2.2
release.

-Wojtek
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm-gcc-4.2] r46039 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

2008-01-15 Thread Anton Korobeynikov
On 1/16/08, Bill Wendling <[EMAIL PROTECTED]> wrote:
> Either way is fine. You're correct that your way is a bit more
> readable. Done.
Thanks!

-- 
With best regards, Anton Korobeynikov
Faculty of Mathematics and Mechanics, Saint Petersburg State University
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r46065 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Wed Jan 16 01:45:30 2008
New Revision: 46065

URL: http://llvm.org/viewvc/llvm-project?rev=46065&view=rev
Log:
rename ExpandBIT_CONVERT to EmitStackConvert, generalizing 
it to allow it to emit different load and store kinds.

Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=46065&r1=46064&r2=46065&view=diff

==
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed Jan 16 01:45:30 2008
@@ -199,7 +199,8 @@
   SDOperand ExpandIntToFP(bool isSigned, MVT::ValueType DestTy,
   SDOperand Source);
 
-  SDOperand ExpandBIT_CONVERT(MVT::ValueType DestVT, SDOperand SrcOp);
+  SDOperand EmitStackConvert(SDOperand SrcOp, MVT::ValueType SlotVT, 
+ MVT::ValueType DestVT);
   SDOperand ExpandBUILD_VECTOR(SDNode *Node);
   SDOperand ExpandSCALAR_TO_VECTOR(SDNode *Node);
   SDOperand ExpandLegalINT_TO_FP(bool isSigned,
@@ -3326,7 +3327,8 @@
   }
   case ISD::BIT_CONVERT:
 if (!isTypeLegal(Node->getOperand(0).getValueType())) {
-  Result = ExpandBIT_CONVERT(Node->getValueType(0), Node->getOperand(0));
+  Result = EmitStackConvert(Node->getOperand(0), Node->getValueType(0),
+Node->getValueType(0));
 } else if (MVT::isVector(Op.getOperand(0).getValueType())) {
   // The input has to be a vector type, we have to either scalarize it, 
pack
   // it, or convert it based on whether the input vector type is legal.
@@ -3357,7 +3359,8 @@
  Node->getOperand(0).getValueType())) {
   default: assert(0 && "Unknown operation action!");
   case TargetLowering::Expand:
-Result = ExpandBIT_CONVERT(Node->getValueType(0), Node->getOperand(0));
+Result = EmitStackConvert(Node->getOperand(0), Node->getValueType(0),
+  Node->getValueType(0));
 break;
   case TargetLowering::Legal:
 Tmp1 = LegalizeOp(Node->getOperand(0));
@@ -3583,7 +3586,7 @@
 Result = DAG.getStore(DAG.getEntryNode(), Node->getOperand(0),
StackSlot, NULL, 0);
 Result = DAG.getExtLoad(ISD::EXTLOAD, newVT,
-   Result, StackSlot, NULL, 0, oldVT);
+Result, StackSlot, NULL, 0, oldVT);
 break;
   }
 }
@@ -3872,7 +3875,8 @@
 }
 break;
   case ISD::BIT_CONVERT:
-Result = ExpandBIT_CONVERT(Node->getValueType(0), Node->getOperand(0));
+Result = EmitStackConvert(Node->getOperand(0), Node->getValueType(0),
+  Node->getValueType(0));
 Result = PromoteOp(Result);
 break;
 
@@ -4559,18 +4563,36 @@
   RHS = Tmp2;
 }
 
-/// ExpandBIT_CONVERT - Expand a BIT_CONVERT node into a store/load 
combination.
-/// The resultant code need not be legal.  Note that SrcOp is the input operand
-/// to the BIT_CONVERT, not the BIT_CONVERT node itself.
-SDOperand SelectionDAGLegalize::ExpandBIT_CONVERT(MVT::ValueType DestVT, 
-  SDOperand SrcOp) {
+/// EmitStackConvert - Emit a store/load combination to the stack.  This stores
+/// SrcOp to a stack slot of type SlotVT, truncating it if needed.  It then 
does
+/// a load from the stack slot to DestVT, extending it if needed.
+/// The resultant code need not be legal.
+SDOperand SelectionDAGLegalize::EmitStackConvert(SDOperand SrcOp,
+ MVT::ValueType SlotVT, 
+ MVT::ValueType DestVT) {
   // Create the stack frame object.
-  SDOperand FIPtr = DAG.CreateStackTemporary(DestVT);
+  SDOperand FIPtr = DAG.CreateStackTemporary(SlotVT);
+
+  unsigned SrcSize = MVT::getSizeInBits(SrcOp.getValueType());
+  unsigned SlotSize = MVT::getSizeInBits(SlotVT);
+  unsigned DestSize = MVT::getSizeInBits(DestVT);
+  
+  // Emit a store to the stack slot.  Use a truncstore if the input value is
+  // later than DestVT.
+  SDOperand Store;
+  if (SrcSize > SlotSize)
+Store = DAG.getTruncStore(DAG.getEntryNode(), SrcOp, FIPtr, NULL, 
0,SlotVT);
+  else {
+assert(SrcSize == SlotSize && "Invalid store");
+Store = DAG.getStore(DAG.getEntryNode(), SrcOp, FIPtr, NULL, 0);
+  }
   
-  // Emit a store to the stack slot.
-  SDOperand Store = DAG.getStore(DAG.getEntryNode(), SrcOp, FIPtr, NULL, 0);
   // Result is a load from the stack slot.
-  return DAG.getLoad(DestVT, Store, FIPtr, NULL, 0);
+  if (SlotSize == DestSize)
+return DAG.getLoad(DestVT, Store, FIPtr, NULL, 0);
+  
+  assert(SlotSize < DestSize && "Unknown extension!");
+  return DAG.getExtLoad(ISD::EXTLOAD, DestVT, Store, FIPtr, N

[llvm-commits] [llvm] r46066 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2008-01-15 Thread Chris Lattner
Author: lattner
Date: Wed Jan 16 01:51:34 2008
New Revision: 46066

URL: http://llvm.org/viewvc/llvm-project?rev=46066&view=rev
Log:
merge a few pieces of code that do the store/load to stack 
pattern to use EmitStackConvert now.

Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=46066&r1=46065&r2=46066&view=diff

==
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed Jan 16 01:51:34 2008
@@ -3573,20 +3573,12 @@
 break;
 
   case ISD::FP_EXTEND: {
-  MVT::ValueType newVT = Op.getValueType();
-  MVT::ValueType oldVT = Op.getOperand(0).getValueType();
-  if (TLI.getConvertAction(oldVT, newVT) == TargetLowering::Expand) {
+  MVT::ValueType DstVT = Op.getValueType();
+  MVT::ValueType SrcVT = Op.getOperand(0).getValueType();
+  if (TLI.getConvertAction(SrcVT, DstVT) == TargetLowering::Expand) {
 // The only other way we can lower this is to turn it into a STORE,
 // LOAD pair, targetting a temporary location (a stack slot).
-
-// NOTE: there is a choice here between constantly creating new stack
-// slots and always reusing the same one.  We currently always create
-// new ones, as reuse may inhibit scheduling.
-SDOperand StackSlot = DAG.CreateStackTemporary(oldVT);
-Result = DAG.getStore(DAG.getEntryNode(), Node->getOperand(0),
-   StackSlot, NULL, 0);
-Result = DAG.getExtLoad(ISD::EXTLOAD, newVT,
-Result, StackSlot, NULL, 0, oldVT);
+Result = EmitStackConvert(Node->getOperand(0), SrcVT, DstVT);
 break;
   }
 }
@@ -3603,25 +3595,18 @@
 }
 break;
   case ISD::FP_ROUND: {
-  MVT::ValueType newVT = Op.getValueType();
-  MVT::ValueType oldVT = Op.getOperand(0).getValueType();
-  if (TLI.getConvertAction(oldVT, newVT) == TargetLowering::Expand) {
-if (oldVT == MVT::ppcf128) {
+  MVT::ValueType DstVT = Op.getValueType();
+  MVT::ValueType SrcVT = Op.getOperand(0).getValueType();
+  if (TLI.getConvertAction(SrcVT, DstVT) == TargetLowering::Expand) {
+if (SrcVT == MVT::ppcf128) {
   SDOperand Lo, Hi;
   ExpandOp(Node->getOperand(0), Lo, Hi);
-  Result = DAG.getNode(ISD::FP_ROUND, newVT, Hi);
+  Result = DAG.getNode(ISD::FP_ROUND, DstVT, Hi);
   break;
 } else {
   // The only other way we can lower this is to turn it into a STORE,
   // LOAD pair, targetting a temporary location (a stack slot).
-
-  // NOTE: there is a choice here between constantly creating new stack
-  // slots and always reusing the same one.  We currently always create
-  // new ones, as reuse may inhibit scheduling.
-  SDOperand StackSlot = DAG.CreateStackTemporary(newVT);
-  Result = DAG.getTruncStore(DAG.getEntryNode(), Node->getOperand(0),
- StackSlot, NULL, 0, newVT);
-  Result = DAG.getLoad(newVT, Result, StackSlot, NULL, 0);
+  Result = EmitStackConvert(Node->getOperand(0), DstVT, DstVT);
   break;
 }
   }
@@ -3700,11 +3685,8 @@
 // NOTE: there is a choice here between constantly creating new stack
 // slots and always reusing the same one.  We currently always create
 // new ones, as reuse may inhibit scheduling.
-SDOperand StackSlot = DAG.CreateStackTemporary(ExtraVT);
-Result = DAG.getTruncStore(DAG.getEntryNode(), Node->getOperand(0),
-   StackSlot, NULL, 0, ExtraVT);
-Result = DAG.getExtLoad(ISD::EXTLOAD, Node->getValueType(0),
-Result, StackSlot, NULL, 0, ExtraVT);
+Result = EmitStackConvert(Node->getOperand(0), ExtraVT, 
+  Node->getValueType(0));
   } else {
 assert(0 && "Unknown op");
   }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] Fix for PR1798 (ScalarEvolution)

2008-01-15 Thread Chris Lattner

On Jan 15, 2008, at 11:29 PM, Wojciech Matyjewicz wrote:

> Chris Lattner wrote:
>> I think we should wait to address this after LLVM 2.2 branches.  That
>> said, the short-term fix is to round up to the next power of two  
>> (e.g.
>> 32 or 64 bits) and disable this transformation when that size is  
>> not a
>> "normal" llvm size (8, 16, 32, 64).
>>
>> Hopefully llvm 2.3 will have real APInt support in the code  
>> generator,
>> at which time we can remove these hacks. :)
>>
>> Does this sound reasonable?
>
> Yes, it does. I'll add the hacks and commit the patch after LLVM 2.2
> release.

Thanks!

-Chris
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm-gcc-4.2] r46039 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

2008-01-15 Thread Duncan Sands
Hi Bill,

> +// Determine endianness of host machine.
> +union {
> +  int x;
> +  char y[sizeof(int)];
> +} u;
> +u.x = 1;
> +bool BigEndian = (u.y[0] != 1);

how about using bigEndianHost in System/Host.h instead?

Ciao,

Duncan.
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits