[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
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
> 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
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
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
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
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
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
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)
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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/
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/
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
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
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
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
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)
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/
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
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
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
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
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
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
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
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
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/
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
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
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
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
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
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
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
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)
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
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
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
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)
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
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