From pjenkins at apple.com Mon Jul 17 11:41:45 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Mon, 17 Jul 2006 11:41:45 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607171641.LAA15278@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.12 -> 1.13 --- Log message: If a gccpath is specified when invoking the nightly test script we will hopefully now use that gcc for the gcc version. Also fixed some 80 char column stuff. --- Diffs of the changes: (+9 -5) NewNightlyTest.pl | 14 +++++++++----- 1 files changed, 9 insertions(+), 5 deletions(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.12 llvm/utils/NewNightlyTest.pl:1.13 --- llvm/utils/NewNightlyTest.pl:1.12 Fri Jul 14 15:44:09 2006 +++ llvm/utils/NewNightlyTest.pl Mon Jul 17 11:41:19 2006 @@ -122,7 +122,8 @@ if (/^-notest$/) { $NOTEST = 1; $NORUNNINGTESTS = 1; next; } if (/^-norunningtests$/) { $NORUNNINGTESTS = 1; next; } if (/^-parallel$/) { $MAKEOPTS = "$MAKEOPTS -j2 -l3.0"; next; } - if (/^-release$/) { $MAKEOPTS = "$MAKEOPTS ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O2"; next; } + if (/^-release$/) { $MAKEOPTS = "$MAKEOPTS ENABLE_OPTIMIZED=1 ". + "OPTIMIZE_OPTION=-O2"; next; } if (/^-enable-llcbeta$/) { $PROGTESTOPTS .= " ENABLE_LLCBETA=1"; next; } if (/^-disable-llc$/) { $PROGTESTOPTS .= " DISABLE_LLC=1"; $CONFIGUREARGS .= " --disable-llc_diffs"; next; } @@ -138,11 +139,13 @@ $CONFIGUREARGS .= "--with-externals=$ARGV[0]"; shift; next; } if (/^-nickname$/) { $nickname = "$ARGV[0]"; shift; next; } - if (/^-gccpath/) { $CONFIGUREARGS .= " CC=$ARGV[0]/gcc CXX=$ARGV[0]/g++"; + if (/^-gccpath/) { $CONFIGUREARGS .= + " CC=$ARGV[0]/gcc CXX=$ARGV[0]/g++"; $GCCPATH=$ARGV[0]; shift; next;} - if (/^-cvstag/) { $CVSCOOPT .= " -r $ARGV[0]"; shift; next; } else{ $CVSCOOPT="";} + if (/^-cvstag/) { $CVSCOOPT .= " -r $ARGV[0]"; shift; next; } + else{ $CVSCOOPT="";} if (/^-target/) { $CONFIGUREARGS .= " --target=$ARGV[0]"; shift; next; } @@ -404,7 +407,8 @@ $port=80; $socketaddr= sockaddr_in $port, inet_aton $host or die "Bad hostname\n"; - socket SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp') or die "Bad socket\n"; + socket SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp') or + die "Bad socket\n"; connect SOCK, $socketaddr or die "Bad connection\n"; select((select(SOCK), $| = 1)[0]); @@ -957,7 +961,7 @@ $dejagnulog_full = join("\n", @DEJAGNULOG_FULL); if($GCCPATH){ - my $gcc_version_long = `$ARGV[0]/gcc --version`; + my $gcc_version_long = `$GCCPATH/gcc --version`; } else{ my $gcc_version_long = `gcc --version`; From jlaskey at apple.com Mon Jul 17 12:38:42 2006 From: jlaskey at apple.com (Jim Laskey) Date: Mon, 17 Jul 2006 12:38:42 -0500 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Constants.cpp Message-ID: <200607171738.MAA22950@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Constants.cpp updated: 1.157 -> 1.158 --- Log message: Reduce the size of Constants.o by 25% by generalizing specific instantiations of std::map. --- Diffs of the changes: (+31 -30) Constants.cpp | 61 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 31 insertions(+), 30 deletions(-) Index: llvm/lib/VMCore/Constants.cpp diff -u llvm/lib/VMCore/Constants.cpp:1.157 llvm/lib/VMCore/Constants.cpp:1.158 --- llvm/lib/VMCore/Constants.cpp:1.157 Fri Jul 14 17:20:01 2006 +++ llvm/lib/VMCore/Constants.cpp Mon Jul 17 12:38:29 2006 @@ -655,16 +655,15 @@ abort(); } }; -} -namespace { template class VISIBILITY_HIDDEN ValueMap : public AbstractTypeUser { public: - typedef std::pair MapKey; - typedef std::map MapTy; - typedef typename MapTy::iterator MapIterator; + typedef std::pair MapKey; + typedef std::map MapTy; + typedef std::map InverseMapTy; + typedef std::map AbstractTypeMapTy; private: /// Map - This is the main map from the element descriptor to the Constants. /// This is the primary way we avoid creating two of the same shape @@ -675,15 +674,16 @@ /// from the constants to their element in Map. This is important for /// removal of constants from the array, which would otherwise have to scan /// through the map with very large keys. - std::map InverseMap; + InverseMapTy InverseMap; - typedef std::map AbstractTypeMapTy; + /// AbstractTypeMap - Map for abstract type constants. + /// AbstractTypeMapTy AbstractTypeMap; friend void Constant::clearAllValueMaps(); private: void clear(std::vector &Constants) { - for(MapIterator I = Map.begin(); I != Map.end(); ++I) + for(typename MapTy::iterator I = Map.begin(); I != Map.end(); ++I) Constants.push_back(I->second); Map.clear(); AbstractTypeMap.clear(); @@ -691,32 +691,32 @@ } public: - MapIterator map_end() { return Map.end(); } + typename MapTy::iterator map_end() { return Map.end(); } /// InsertOrGetItem - Return an iterator for the specified element. /// If the element exists in the map, the returned iterator points to the /// entry and Exists=true. If not, the iterator points to the newly /// inserted entry and returns Exists=false. Newly inserted entries have /// I->second == 0, and should be filled in. - MapIterator InsertOrGetItem(std::pair &InsertVal, + typename MapTy::iterator InsertOrGetItem(std::pair + &InsertVal, bool &Exists) { - std::pair IP = Map.insert(InsertVal); + std::pair IP = Map.insert(InsertVal); Exists = !IP.second; return IP.first; } private: - MapIterator FindExistingElement(ConstantClass *CP) { + typename MapTy::iterator FindExistingElement(ConstantClass *CP) { if (HasLargeKey) { - typename std::map::iterator - IMI = InverseMap.find(CP); + typename InverseMapTy::iterator IMI = InverseMap.find(CP); assert(IMI != InverseMap.end() && IMI->second != Map.end() && IMI->second->second == CP && "InverseMap corrupt!"); return IMI->second; } - MapIterator I = + typename MapTy::iterator I = Map.find(MapKey((TypeClass*)CP->getRawType(), getValType(CP))); if (I == Map.end() || I->second != CP) { // FIXME: This should not use a linear scan. If this gets to be a @@ -732,9 +732,9 @@ /// necessary. ConstantClass *getOrCreate(const TypeClass *Ty, const ValType &V) { MapKey Lookup(Ty, V); - MapIterator I = Map.lower_bound(Lookup); + typename MapTy::iterator I = Map.lower_bound(Lookup); if (I != Map.end() && I->first == Lookup) - return I->second; // Is it in the map? + return static_cast(I->second); // Is it in the map? // If no preexisting value, create one now... ConstantClass *Result = @@ -764,7 +764,7 @@ } void remove(ConstantClass *CP) { - MapIterator I = FindExistingElement(CP); + typename MapTy::iterator I = FindExistingElement(CP); assert(I != Map.end() && "Constant not found in constant table!"); assert(I->second == CP && "Didn't find correct element?"); @@ -773,15 +773,15 @@ // Now that we found the entry, make sure this isn't the entry that // the AbstractTypeMap points to. - const TypeClass *Ty = I->first.first; + const TypeClass *Ty = static_cast(I->first.first); if (Ty->isAbstract()) { assert(AbstractTypeMap.count(Ty) && "Abstract type not in AbstractTypeMap?"); - MapIterator &ATMEntryIt = AbstractTypeMap[Ty]; + typename MapTy::iterator &ATMEntryIt = AbstractTypeMap[Ty]; if (ATMEntryIt == I) { // Yes, we are removing the representative entry for this type. // See if there are any other entries of the same type. - MapIterator TmpIt = ATMEntryIt; + typename MapTy::iterator TmpIt = ATMEntryIt; // First check the entry before this one... if (TmpIt != Map.begin()) { @@ -817,9 +817,9 @@ /// MoveConstantToNewSlot - If we are about to change C to be the element /// specified by I, update our internal data structures to reflect this /// fact. - void MoveConstantToNewSlot(ConstantClass *C, MapIterator I) { + void MoveConstantToNewSlot(ConstantClass *C, typename MapTy::iterator I) { // First, remove the old location of the specified constant in the map. - MapIterator OldI = FindExistingElement(C); + typename MapTy::iterator OldI = FindExistingElement(C); assert(OldI != Map.end() && "Constant not found in constant table!"); assert(OldI->second == C && "Didn't find correct element?"); @@ -847,7 +847,7 @@ void refineAbstractType(const DerivedType *OldTy, const Type *NewTy) { typename AbstractTypeMapTy::iterator I = - AbstractTypeMap.find(cast(OldTy)); + AbstractTypeMap.find(cast(OldTy)); assert(I != AbstractTypeMap.end() && "Abstract type not in AbstractTypeMap?"); @@ -857,10 +857,11 @@ // eliminated eventually. do { ConvertConstantType::convert(I->second->second, + TypeClass>::convert( + static_cast(I->second->second), cast(NewTy)); - I = AbstractTypeMap.find(cast(OldTy)); + I = AbstractTypeMap.find(cast(OldTy)); } while (I != AbstractTypeMap.end()); } @@ -1630,7 +1631,7 @@ unsigned OperandToUpdate = U-OperandList; assert(getOperand(OperandToUpdate) == From && "ReplaceAllUsesWith broken!"); - std::pair Lookup; + std::pair Lookup; Lookup.first.first = getType(); Lookup.second = this; @@ -1659,7 +1660,7 @@ } else { // Check to see if we have this array type already. bool Exists; - ArrayConstantsTy::MapIterator I = + ArrayConstantsTy::MapTy::iterator I = ArrayConstants.InsertOrGetItem(Lookup, Exists); if (Exists) { @@ -1695,7 +1696,7 @@ unsigned OperandToUpdate = U-OperandList; assert(getOperand(OperandToUpdate) == From && "ReplaceAllUsesWith broken!"); - std::pair Lookup; + std::pair Lookup; Lookup.first.first = getType(); Lookup.second = this; std::vector &Values = Lookup.first.second; @@ -1724,7 +1725,7 @@ } else { // Check to see if we have this array type already. bool Exists; - StructConstantsTy::MapIterator I = + StructConstantsTy::MapTy::iterator I = StructConstants.InsertOrGetItem(Lookup, Exists); if (Exists) { From pjenkins at apple.com Mon Jul 17 14:02:59 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Mon, 17 Jul 2006 14:02:59 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607171902.OAA22460@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.13 -> 1.14 --- Log message: Changed the email portion to output a file, then pipe that file to mail, then remove the file. Hopefully this hack will allow mail to be sent. --- Diffs of the changes: (+4 -2) NightlyTestAccept.cgi | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.13 nightlytest-serverside/NightlyTestAccept.cgi:1.14 --- nightlytest-serverside/NightlyTestAccept.cgi:1.13 Fri Jul 14 16:13:25 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Mon Jul 17 14:02:46 2006 @@ -1,4 +1,4 @@ -#!/usr/bin/perl -w +7#!/usr/bin/perl -w # # Background: Written on June 1st 2006 by Patrick Jenkins to accept test results # from the llvm NightlyTest.pl script. It is just a CGI script that takes input by the @@ -484,5 +484,7 @@ $email = "$machine_data\n\n$dejagnutests_log\n\ncvs user commit list:\n$cvsusercommitlist\n\ncvs user ". "update list:\n$cvsuserupdatelist\n\ncvs changed files:\n$cvsmodifiedfiles\n"; +WriteFile "email.txt", $email; $email_addr = "llvm-testresults\@cs.uiuc.edu"; -`mail -s '$nickname $hardware nightly tester results' $email_addr < $email`; +`mail -s '$nickname $hardware nightly tester results' $email_addr < email.txt`; +`rm -f email.txt;` From pjenkins at apple.com Mon Jul 17 14:09:25 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Mon, 17 Jul 2006 14:09:25 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607171909.OAA23537@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.14 -> 1.15 --- Log message: fixed a stupid typo --- Diffs of the changes: (+1 -1) NightlyTestAccept.cgi | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.14 nightlytest-serverside/NightlyTestAccept.cgi:1.15 --- nightlytest-serverside/NightlyTestAccept.cgi:1.14 Mon Jul 17 14:02:46 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Mon Jul 17 14:09:12 2006 @@ -1,4 +1,4 @@ -7#!/usr/bin/perl -w +#!/usr/bin/perl -w # # Background: Written on June 1st 2006 by Patrick Jenkins to accept test results # from the llvm NightlyTest.pl script. It is just a CGI script that takes input by the From pjenkins at apple.com Mon Jul 17 16:37:40 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Mon, 17 Jul 2006 16:37:40 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607172137.QAA21342@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.15 -> 1.16 --- Log message: Moved email to llvm test results email archive ahead of writing to log files --- Diffs of the changes: (+12 -13) NightlyTestAccept.cgi | 25 ++++++++++++------------- 1 files changed, 12 insertions(+), 13 deletions(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.15 nightlytest-serverside/NightlyTestAccept.cgi:1.16 --- nightlytest-serverside/NightlyTestAccept.cgi:1.15 Mon Jul 17 14:09:12 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Mon Jul 17 16:37:27 2006 @@ -445,6 +445,18 @@ print "DB date : $db_date\n"; print "Machine $machine_id now has ids [@nights]{$length} associated with it in the database\n"; +###################################################################################################### +# +# Sending email to nightly test email archive +# +###################################################################################################### + +$email = "$machine_data\n\n$dejagnutests_log\n\ncvs user commit list:\n$cvsusercommitlist\n\ncvs user ". + "update list:\n$cvsuserupdatelist\n\ncvs changed files:\n$cvsmodifiedfiles\n"; +WriteFile "email.txt", $email; +$email_addr = "llvm-testresults\@cs.uiuc.edu"; +`mail -s '$nickname $hardware nightly tester results' $email_addr < email.txt`; +`rm -f email.txt;` ###################################################################################################### # @@ -475,16 +487,3 @@ #WriteFile "$this_days_logs/$dejagnu_testrun_log_file",$dejagnutests_log; #WriteFile "$this_days_logs/$dejagnu_testrun_sum_file",$dejagnutests_sum; #WriteFile "$this_days_logs/$warnings_file",$buildwarnings; - -###################################################################################################### -# -# Sending email to nightly test email archive -# -###################################################################################################### - -$email = "$machine_data\n\n$dejagnutests_log\n\ncvs user commit list:\n$cvsusercommitlist\n\ncvs user ". - "update list:\n$cvsuserupdatelist\n\ncvs changed files:\n$cvsmodifiedfiles\n"; -WriteFile "email.txt", $email; -$email_addr = "llvm-testresults\@cs.uiuc.edu"; -`mail -s '$nickname $hardware nightly tester results' $email_addr < email.txt`; -`rm -f email.txt;` From pjenkins at apple.com Mon Jul 17 16:51:15 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Mon, 17 Jul 2006 16:51:15 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607172151.QAA21475@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.16 -> 1.17 --- Log message: Fixed a silly syntax error :-( --- Diffs of the changes: (+1 -1) NightlyTestAccept.cgi | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.16 nightlytest-serverside/NightlyTestAccept.cgi:1.17 --- nightlytest-serverside/NightlyTestAccept.cgi:1.16 Mon Jul 17 16:37:27 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Mon Jul 17 16:51:02 2006 @@ -456,7 +456,7 @@ WriteFile "email.txt", $email; $email_addr = "llvm-testresults\@cs.uiuc.edu"; `mail -s '$nickname $hardware nightly tester results' $email_addr < email.txt`; -`rm -f email.txt;` +`rm -f email.txt`; ###################################################################################################### # From lattner at cs.uiuc.edu Mon Jul 17 19:47:22 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon, 17 Jul 2006 19:47:22 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Support/MathExtras.h Message-ID: <200607180047.TAA22618@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Support: MathExtras.h updated: 1.32 -> 1.33 --- Log message: Add functions to compute ceil(log2(N)) to match functions for floor(log2(N)) --- Diffs of the changes: (+14 -1) MathExtras.h | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletion(-) Index: llvm/include/llvm/Support/MathExtras.h diff -u llvm/include/llvm/Support/MathExtras.h:1.32 llvm/include/llvm/Support/MathExtras.h:1.33 --- llvm/include/llvm/Support/MathExtras.h:1.32 Wed Jun 21 17:19:00 2006 +++ llvm/include/llvm/Support/MathExtras.h Mon Jul 17 19:47:10 2006 @@ -228,7 +228,7 @@ // Log2_32 - This function returns the floor log base 2 of the specified value, // -1 if the value is zero. (32 bit edition.) -// Ex. Log2_32(32) == 5, Log2_32(1) == 0, Log2_32(0) == -1 +// Ex. Log2_32(32) == 5, Log2_32(1) == 0, Log2_32(0) == -1, Log2_32(6) == 2 inline unsigned Log2_32(unsigned Value) { return 31 - CountLeadingZeros_32(Value); } @@ -239,6 +239,19 @@ return 63 - CountLeadingZeros_64(Value); } +// Log2_32_Ceil - This function returns the ceil log base 2 of the specified +// value, 32 if the value is zero. (32 bit edition). +// Ex. Log2_32_Ceil(32) == 5, Log2_32_Ceil(1) == 0, Log2_32_Ceil(6) == 3 +inline unsigned Log2_32_Ceil(unsigned Value) { + return 32-CountLeadingZeros_32(Value-1); +} + +// Log2_64 - This function returns the ceil log base 2 of the specified value, +// 64 if the value is zero. (64 bit edition.) +inline unsigned Log2_64_Ceil(uint64_t Value) { + return 64-CountLeadingZeros_64(Value-1); +} + // BitsToDouble - This function takes a 64-bit integer and returns the bit // equivalent double. inline double BitsToDouble(uint64_t Bits) { From lattner at cs.uiuc.edu Tue Jul 18 01:53:04 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 01:53:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/System/Unix/MappedFile.inc Message-ID: <200607180653.BAA24147@zion.cs.uiuc.edu> Changes in directory llvm/lib/System/Unix: MappedFile.inc updated: 1.11 -> 1.12 --- Log message: Unindent some code --- Diffs of the changes: (+24 -25) MappedFile.inc | 49 ++++++++++++++++++++++++------------------------- 1 files changed, 24 insertions(+), 25 deletions(-) Index: llvm/lib/System/Unix/MappedFile.inc diff -u llvm/lib/System/Unix/MappedFile.inc:1.11 llvm/lib/System/Unix/MappedFile.inc:1.12 --- llvm/lib/System/Unix/MappedFile.inc:1.11 Thu May 5 17:33:06 2005 +++ llvm/lib/System/Unix/MappedFile.inc Tue Jul 18 01:52:52 2006 @@ -40,32 +40,31 @@ }; void MappedFile::initialize() { - if (path_.exists()) { - info_ = new MappedFileInfo; - int mode = 0; - if (options_&READ_ACCESS) - if (options_&WRITE_ACCESS) - mode = O_RDWR; - else - mode = O_RDONLY; - else if (options_&WRITE_ACCESS) - mode = O_WRONLY; - info_->fd_ = ::open(path_.c_str(),mode); - - if (info_->fd_ < 0) { - delete info_; - info_ = 0; - ThrowErrno(std::string("Can't open file: ") + path_.toString()); - } - struct stat sbuf; - if(::fstat(info_->fd_, &info_->sbuf_) < 0) { - ::close(info_->fd_); - delete info_; - info_ = 0; - ThrowErrno(std::string("Can't stat file: ") + path_.toString()); - } - } else { + if (!path_.exists()) throw std::string("Can't open file: ") + path_.toString(); + + info_ = new MappedFileInfo; + int mode = 0; + if (options_&READ_ACCESS) + if (options_&WRITE_ACCESS) + mode = O_RDWR; + else + mode = O_RDONLY; + else if (options_&WRITE_ACCESS) + mode = O_WRONLY; + info_->fd_ = ::open(path_.c_str(),mode); + + if (info_->fd_ < 0) { + delete info_; + info_ = 0; + ThrowErrno(std::string("Can't open file: ") + path_.toString()); + } + struct stat sbuf; + if(::fstat(info_->fd_, &info_->sbuf_) < 0) { + ::close(info_->fd_); + delete info_; + info_ = 0; + ThrowErrno(std::string("Can't stat file: ") + path_.toString()); } } From lattner at cs.uiuc.edu Tue Jul 18 01:58:03 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 01:58:03 -0500 Subject: [llvm-commits] CVS: llvm/lib/System/Unix/MappedFile.inc Message-ID: <200607180658.BAA24229@zion.cs.uiuc.edu> Changes in directory llvm/lib/System/Unix: MappedFile.inc updated: 1.12 -> 1.13 --- Log message: Reduce code in the error path by only allocating info_ if everything looks good. --- Diffs of the changes: (+8 -10) MappedFile.inc | 18 ++++++++---------- 1 files changed, 8 insertions(+), 10 deletions(-) Index: llvm/lib/System/Unix/MappedFile.inc diff -u llvm/lib/System/Unix/MappedFile.inc:1.12 llvm/lib/System/Unix/MappedFile.inc:1.13 --- llvm/lib/System/Unix/MappedFile.inc:1.12 Tue Jul 18 01:52:52 2006 +++ llvm/lib/System/Unix/MappedFile.inc Tue Jul 18 01:57:51 2006 @@ -43,7 +43,6 @@ if (!path_.exists()) throw std::string("Can't open file: ") + path_.toString(); - info_ = new MappedFileInfo; int mode = 0; if (options_&READ_ACCESS) if (options_&WRITE_ACCESS) @@ -52,20 +51,19 @@ mode = O_RDONLY; else if (options_&WRITE_ACCESS) mode = O_WRONLY; - info_->fd_ = ::open(path_.c_str(),mode); - if (info_->fd_ < 0) { - delete info_; - info_ = 0; + int FD = ::open(path_.c_str(), mode); + if (FD < 0) ThrowErrno(std::string("Can't open file: ") + path_.toString()); - } + struct stat sbuf; - if(::fstat(info_->fd_, &info_->sbuf_) < 0) { - ::close(info_->fd_); - delete info_; - info_ = 0; + if(::fstat(FD, &sbuf) < 0) { + ::close(FD); ThrowErrno(std::string("Can't stat file: ") + path_.toString()); } + info_ = new MappedFileInfo; + info_->fd_ = FD; + info_->sbuf_ = sbuf; } void MappedFile::terminate() { From lattner at cs.uiuc.edu Tue Jul 18 02:01:20 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 02:01:20 -0500 Subject: [llvm-commits] CVS: llvm/lib/System/Unix/MappedFile.inc Message-ID: <200607180701.CAA24349@zion.cs.uiuc.edu> Changes in directory llvm/lib/System/Unix: MappedFile.inc updated: 1.13 -> 1.14 --- Log message: The only entry in the stat buf this code cares about is the size. Keep just the size, not the whole stat buffer. --- Diffs of the changes: (+14 -14) MappedFile.inc | 28 ++++++++++++++-------------- 1 files changed, 14 insertions(+), 14 deletions(-) Index: llvm/lib/System/Unix/MappedFile.inc diff -u llvm/lib/System/Unix/MappedFile.inc:1.13 llvm/lib/System/Unix/MappedFile.inc:1.14 --- llvm/lib/System/Unix/MappedFile.inc:1.13 Tue Jul 18 01:57:51 2006 +++ llvm/lib/System/Unix/MappedFile.inc Tue Jul 18 02:01:08 2006 @@ -35,8 +35,8 @@ using namespace sys; struct sys::MappedFileInfo { - int fd_; - struct stat sbuf_; + int FD; + off_t Size; }; void MappedFile::initialize() { @@ -62,14 +62,14 @@ ThrowErrno(std::string("Can't stat file: ") + path_.toString()); } info_ = new MappedFileInfo; - info_->fd_ = FD; - info_->sbuf_ = sbuf; + info_->FD = FD; + info_->Size = sbuf.st_size; } void MappedFile::terminate() { assert(info_ && "MappedFile not initialized"); - if (info_->fd_ >= 0) - ::close(info_->fd_); + if (info_->FD >= 0) + ::close(info_->FD); delete info_; info_ = 0; } @@ -78,8 +78,8 @@ assert(info_ && "MappedFile not initialized"); if (isMapped()) { if (options_ & WRITE_ACCESS) - ::msync(base_, info_->sbuf_.st_size, MS_SYNC); - ::munmap(base_, info_->sbuf_.st_size); + ::msync(base_, info_->Size, MS_SYNC); + ::munmap(base_, info_->Size); } } @@ -106,10 +106,10 @@ else flags |= MAP_PRIVATE; } - size_t map_size = ((info_->sbuf_.st_size / Process::GetPageSize())+1) * + size_t map_size = ((info_->Size / Process::GetPageSize())+1) * Process::GetPageSize(); - base_ = ::mmap(0, map_size, prot, flags, info_->fd_, 0); + base_ = ::mmap(0, map_size, prot, flags, info_->FD, 0); if (base_ == MAP_FAILED) ThrowErrno(std::string("Can't map file:") + path_.toString()); } @@ -118,7 +118,7 @@ size_t MappedFile::size() const { assert(info_ && "MappedFile not initialized"); - return info_->sbuf_.st_size; + return info_->Size; } void MappedFile::size(size_t new_size) { @@ -128,7 +128,7 @@ this->unmap(); // Adjust the current size to a page boundary - size_t cur_size = ((info_->sbuf_.st_size / Process::GetPageSize())+1) * + size_t cur_size = ((info_->Size / Process::GetPageSize())+1) * Process::GetPageSize(); // Adjust the new_size to a page boundary @@ -139,8 +139,8 @@ if (new_size > cur_size) { // Ensure we can allocate at least the idodes necessary to handle the // file size requested. - ::lseek(info_->fd_, new_size, SEEK_SET); - ::write(info_->fd_, "\0", 1); + ::lseek(info_->FD, new_size, SEEK_SET); + ::write(info_->FD, "\0", 1); } // Seek to current end of file. From lattner at cs.uiuc.edu Tue Jul 18 02:03:26 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 02:03:26 -0500 Subject: [llvm-commits] CVS: llvm/lib/System/Unix/MappedFile.inc Message-ID: <200607180703.CAA24418@zion.cs.uiuc.edu> Changes in directory llvm/lib/System/Unix: MappedFile.inc updated: 1.14 -> 1.15 --- Log message: Remove a dead conditional: info_ can only be allocated if FD is good. Improve spacing --- Diffs of the changes: (+4 -5) MappedFile.inc | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-) Index: llvm/lib/System/Unix/MappedFile.inc diff -u llvm/lib/System/Unix/MappedFile.inc:1.14 llvm/lib/System/Unix/MappedFile.inc:1.15 --- llvm/lib/System/Unix/MappedFile.inc:1.14 Tue Jul 18 02:01:08 2006 +++ llvm/lib/System/Unix/MappedFile.inc Tue Jul 18 02:03:14 2006 @@ -44,12 +44,12 @@ throw std::string("Can't open file: ") + path_.toString(); int mode = 0; - if (options_&READ_ACCESS) - if (options_&WRITE_ACCESS) + if (options_ & READ_ACCESS) + if (options_ & WRITE_ACCESS) mode = O_RDWR; else mode = O_RDONLY; - else if (options_&WRITE_ACCESS) + else if (options_ & WRITE_ACCESS) mode = O_WRONLY; int FD = ::open(path_.c_str(), mode); @@ -68,8 +68,7 @@ void MappedFile::terminate() { assert(info_ && "MappedFile not initialized"); - if (info_->FD >= 0) - ::close(info_->FD); + ::close(info_->FD); delete info_; info_ = 0; } From lattner at cs.uiuc.edu Tue Jul 18 02:08:04 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 02:08:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/System/Unix/MappedFile.inc Message-ID: <200607180708.CAA25171@zion.cs.uiuc.edu> Changes in directory llvm/lib/System/Unix: MappedFile.inc updated: 1.15 -> 1.16 --- Log message: simple optimization: don't bother calling "exists" (which calls the syscall "access"). Instead, just let the open call fail if the file doesn't exist. This reduces the # syscalls executed. --- Diffs of the changes: (+0 -3) MappedFile.inc | 3 --- 1 files changed, 3 deletions(-) Index: llvm/lib/System/Unix/MappedFile.inc diff -u llvm/lib/System/Unix/MappedFile.inc:1.15 llvm/lib/System/Unix/MappedFile.inc:1.16 --- llvm/lib/System/Unix/MappedFile.inc:1.15 Tue Jul 18 02:03:14 2006 +++ llvm/lib/System/Unix/MappedFile.inc Tue Jul 18 02:07:51 2006 @@ -40,9 +40,6 @@ }; void MappedFile::initialize() { - if (!path_.exists()) - throw std::string("Can't open file: ") + path_.toString(); - int mode = 0; if (options_ & READ_ACCESS) if (options_ & WRITE_ACCESS) From lattner at cs.uiuc.edu Tue Jul 18 11:33:52 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 11:33:52 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCInstr64Bit.td PPCInstrAltivec.td PPCInstrInfo.td Message-ID: <200607181633.LAA04688@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPCInstr64Bit.td updated: 1.18 -> 1.19 PPCInstrAltivec.td updated: 1.54 -> 1.55 PPCInstrInfo.td updated: 1.238 -> 1.239 --- Log message: Make the implicit def instructions look like other instrs. --- Diffs of the changes: (+5 -5) PPCInstr64Bit.td | 2 +- PPCInstrAltivec.td | 2 +- PPCInstrInfo.td | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) Index: llvm/lib/Target/PowerPC/PPCInstr64Bit.td diff -u llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.18 llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.19 --- llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.18 Thu Jul 13 23:42:02 2006 +++ llvm/lib/Target/PowerPC/PPCInstr64Bit.td Tue Jul 18 11:33:26 2006 @@ -57,7 +57,7 @@ // Pseudo instructions. // -def IMPLICIT_DEF_G8RC : Pseudo<(ops G8RC:$rD), "; $rD = IMPLICIT_DEF_G8RC", +def IMPLICIT_DEF_G8RC : Pseudo<(ops G8RC:$rD), "; IMPLICIT_DEF_G8RC $rD", [(set G8RC:$rD, (undef))]>; let Pattern = [(PPCmtctr G8RC:$rS)] in { Index: llvm/lib/Target/PowerPC/PPCInstrAltivec.td diff -u llvm/lib/Target/PowerPC/PPCInstrAltivec.td:1.54 llvm/lib/Target/PowerPC/PPCInstrAltivec.td:1.55 --- llvm/lib/Target/PowerPC/PPCInstrAltivec.td:1.54 Mon Jun 19 19:39:56 2006 +++ llvm/lib/Target/PowerPC/PPCInstrAltivec.td Tue Jul 18 11:33:26 2006 @@ -157,7 +157,7 @@ //===----------------------------------------------------------------------===// // Instruction Definitions. -def IMPLICIT_DEF_VRRC : Pseudo<(ops VRRC:$rD), "; $rD = IMPLICIT_DEF_VRRC", +def IMPLICIT_DEF_VRRC : Pseudo<(ops VRRC:$rD), "; IMPLICIT_DEF_VRRC $rD", [(set VRRC:$rD, (v4i32 (undef)))]>; let noResults = 1 in { Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.238 llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.239 --- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.238 Mon Jul 10 15:56:58 2006 +++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Tue Jul 18 11:33:26 2006 @@ -262,11 +262,11 @@ def UPDATE_VRSAVE : Pseudo<(ops GPRC:$rD, GPRC:$rS), "UPDATE_VRSAVE $rD, $rS", []>; } -def IMPLICIT_DEF_GPRC: Pseudo<(ops GPRC:$rD), "; $rD = IMPLICIT_DEF_GPRC", +def IMPLICIT_DEF_GPRC: Pseudo<(ops GPRC:$rD), "; IMPLICIT_DEF_GPRC $rD", [(set GPRC:$rD, (undef))]>; -def IMPLICIT_DEF_F8 : Pseudo<(ops F8RC:$rD), "; $rD = IMPLICIT_DEF_F8", +def IMPLICIT_DEF_F8 : Pseudo<(ops F8RC:$rD), "; IMPLICIT_DEF_F8 $rD", [(set F8RC:$rD, (undef))]>; -def IMPLICIT_DEF_F4 : Pseudo<(ops F4RC:$rD), "; $rD = IMPLICIT_DEF_F4", +def IMPLICIT_DEF_F4 : Pseudo<(ops F4RC:$rD), "; IMPLICIT_DEF_F4 $rD", [(set F4RC:$rD, (undef))]>; // SELECT_CC_* - Used to implement the SELECT_CC DAG operation. Expanded by the From rafael.espindola at gmail.com Tue Jul 18 12:00:43 2006 From: rafael.espindola at gmail.com (Rafael Espindola) Date: Tue, 18 Jul 2006 12:00:43 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.td ARMRegisterInfo.cpp Message-ID: <200607181700.MAA05083@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMInstrInfo.td updated: 1.8 -> 1.9 ARMRegisterInfo.cpp updated: 1.7 -> 1.8 --- Log message: initial prologue and epilogue implementation. Need to define add and sub before finishing it :-) --- Diffs of the changes: (+23 -1) ARMInstrInfo.td | 4 +++- ARMRegisterInfo.cpp | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) Index: llvm/lib/Target/ARM/ARMInstrInfo.td diff -u llvm/lib/Target/ARM/ARMInstrInfo.td:1.8 llvm/lib/Target/ARM/ARMInstrInfo.td:1.9 --- llvm/lib/Target/ARM/ARMInstrInfo.td:1.8 Sat Jul 15 20:02:57 2006 +++ llvm/lib/Target/ARM/ARMInstrInfo.td Tue Jul 18 12:00:30 2006 @@ -53,7 +53,9 @@ "!ADJCALLSTACKDOWN $amt", [(callseq_start imm:$amt)]>; -def bxr: InstARM<(ops IntRegs:$dst), "bx $dst", [(brind IntRegs:$dst)]>; +let isReturn = 1 in { + def bx: InstARM<(ops IntRegs:$dst), "bx $dst", [(brind IntRegs:$dst)]>; +} def bl: InstARM<(ops i32imm:$func, variable_ops), "bl $func", [(ARMcall tglobaladdr:$func)]>; Index: llvm/lib/Target/ARM/ARMRegisterInfo.cpp diff -u llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.7 llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.8 --- llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.7 Tue Jul 11 06:36:48 2006 +++ llvm/lib/Target/ARM/ARMRegisterInfo.cpp Tue Jul 18 12:00:30 2006 @@ -116,10 +116,30 @@ processFunctionBeforeFrameFinalized(MachineFunction &MF) const {} void ARMRegisterInfo::emitPrologue(MachineFunction &MF) const { + MachineBasicBlock &MBB = MF.front(); + MachineFrameInfo *MFI = MF.getFrameInfo(); + int NumBytes = (int) MFI->getStackSize(); + + //hack + assert(NumBytes == 0); + + //add a sp = sp - 4 + BuildMI(MBB, MBB.begin(), ARM::str, 1, ARM::R14).addReg(ARM::R13); } void ARMRegisterInfo::emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const { + MachineBasicBlock::iterator MBBI = prior(MBB.end()); + assert(MBBI->getOpcode() == ARM::bx && + "Can only insert epilog into returning blocks"); + + MachineFrameInfo *MFI = MF.getFrameInfo(); + int NumBytes = (int) MFI->getStackSize(); + //hack + assert(NumBytes == 0); + + BuildMI(MBB, MBBI, ARM::ldr, 2, ARM::R14).addImm(0).addReg(ARM::R13); + //add a sp = sp + 4 } unsigned ARMRegisterInfo::getRARegister() const { From lattner at cs.uiuc.edu Tue Jul 18 12:18:15 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 12:18:15 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/AsmWriterEmitter.cpp AsmWriterEmitter.h Message-ID: <200607181718.MAA05382@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: AsmWriterEmitter.cpp updated: 1.30 -> 1.31 AsmWriterEmitter.h updated: 1.2 -> 1.3 --- Log message: Completely change the structure of the generated asmprinter to be more table based and less switch-statements-with-hundreds-of-cases based. This shrinks the x86 asmprinters to about 1/3 their previous size. Other improvements coming. --- Diffs of the changes: (+207 -26) AsmWriterEmitter.cpp | 212 ++++++++++++++++++++++++++++++++++++++++++++------- AsmWriterEmitter.h | 21 ++++- 2 files changed, 207 insertions(+), 26 deletions(-) Index: llvm/utils/TableGen/AsmWriterEmitter.cpp diff -u llvm/utils/TableGen/AsmWriterEmitter.cpp:1.30 llvm/utils/TableGen/AsmWriterEmitter.cpp:1.31 --- llvm/utils/TableGen/AsmWriterEmitter.cpp:1.30 Fri Jul 14 18:14:02 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.cpp Tue Jul 18 12:18:03 2006 @@ -16,6 +16,8 @@ #include "CodeGenTarget.h" #include "Record.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/MathExtras.h" #include #include using namespace llvm; @@ -60,9 +62,13 @@ bool operator==(const AsmWriterOperand &Other) const { return !operator!=(Other); } - void EmitCode(std::ostream &OS) const; + + /// getCode - Return the code that prints this operand. + std::string getCode() const; }; +} +namespace llvm { struct AsmWriterInst { std::vector Operands; const CodeGenInstruction *CGI; @@ -88,15 +94,14 @@ } -void AsmWriterOperand::EmitCode(std::ostream &OS) const { +std::string AsmWriterOperand::getCode() const { if (OperandType == isLiteralTextOperand) - OS << "O << \"" << Str << "\"; "; - else { - OS << Str << "(MI, " << MIOpNo; - if (!MiModifier.empty()) - OS << ", \"" << MiModifier << '"'; - OS << "); "; - } + return "O << \"" + Str + "\"; "; + + std::string Result = Str + "(MI, " + utostr(MIOpNo); + if (!MiModifier.empty()) + Result += ", \"" + MiModifier + '"'; + return Result + "); "; } @@ -259,7 +264,7 @@ } // Finally, emit the code. - TheOp.EmitCode(O); + O << TheOp.getCode(); O << "break;\n"; } @@ -296,8 +301,7 @@ for (unsigned i = 0, e = FirstInst.Operands.size(); i != e; ++i) { if (i != DifferingOperand) { // If the operand is the same for all instructions, just print it. - O << " "; - FirstInst.Operands[i].EmitCode(O); + O << " " << FirstInst.Operands[i].getCode(); } else { // If this is the operand that varies between all of the instructions, // emit a switch for just this operand now. @@ -324,6 +328,64 @@ O << " break;\n"; } +void AsmWriterEmitter:: +FindUniqueOperandCommands(std::vector &UniqueOperandCommands, + std::vector &InstIdxs, unsigned Op) const { + InstIdxs.clear(); + InstIdxs.resize(NumberedInstructions.size()); + + // This vector parallels UniqueOperandCommands, keeping track of which + // instructions each case are used for. It is a comma separated string of + // enums. + std::vector InstrsForCase; + InstrsForCase.resize(UniqueOperandCommands.size()); + + for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { + const AsmWriterInst *Inst = getAsmWriterInstByID(i); + if (Inst == 0) continue; // PHI, INLINEASM, etc. + + std::string Command; + if (Op > Inst->Operands.size()) + continue; // Instruction already done. + else if (Op == Inst->Operands.size()) + Command = " return true;\n"; + else + Command = " " + Inst->Operands[Op].getCode() + "\n"; + + // Check to see if we already have 'Command' in UniqueOperandCommands. + // If not, add it. + bool FoundIt = false; + for (unsigned idx = 0, e = UniqueOperandCommands.size(); idx != e; ++idx) + if (UniqueOperandCommands[idx] == Command) { + InstIdxs[i] = idx; + InstrsForCase[idx] += ", "; + InstrsForCase[idx] += Inst->CGI->TheDef->getName(); + FoundIt = true; + break; + } + if (!FoundIt) { + InstIdxs[i] = UniqueOperandCommands.size(); + UniqueOperandCommands.push_back(Command); + InstrsForCase.push_back(Inst->CGI->TheDef->getName()); + } + } + + // Prepend some of the instructions each case is used for onto the case val. + for (unsigned i = 0, e = InstrsForCase.size(); i != e; ++i) { + std::string Instrs = InstrsForCase[i]; + if (Instrs.size() > 70) { + Instrs.erase(Instrs.begin()+70, Instrs.end()); + Instrs += "..."; + } + + if (!Instrs.empty()) + UniqueOperandCommands[i] = " // " + Instrs + "\n" + + UniqueOperandCommands[i]; + } +} + + + void AsmWriterEmitter::run(std::ostream &O) { EmitSourceFileHeader("Assembly Writer Source Fragment", O); @@ -347,13 +409,12 @@ if (!I->second.AsmString.empty()) Instructions.push_back(AsmWriterInst(I->second, Variant)); - std::vector NumberedInstructions; + // Get the instruction numbering. Target.getInstructionsByEnumValue(NumberedInstructions); // Compute the CodeGenInstruction -> AsmWriterInst mapping. Note that not // all machine instructions are necessarily being printed, so there may be // target instructions not in this map. - std::map CGIAWIMap; for (unsigned i = 0, e = Instructions.size(); i != e; ++i) CGIAWIMap.insert(std::make_pair(Instructions[i].CGI, &Instructions[i])); @@ -362,7 +423,10 @@ std::string AggregateString; AggregateString += '\0'; - O << " static const unsigned short OpStrIdxs[] = {\n"; + /// OpcodeInfo - The first value in the pair is the index into the string, the + /// second is an index used for operand printing information. + std::vector > OpcodeInfo; + for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { AsmWriterInst *AWI = CGIAWIMap[NumberedInstructions[i]]; unsigned Idx; @@ -385,9 +449,60 @@ // Nuke the string from the operand list. It is now handled! AWI->Operands.erase(AWI->Operands.begin()); } - O << " " << Idx << ",\t// " << NumberedInstructions[i]->TheDef->getName() - << "\n"; + OpcodeInfo.push_back(std::pair(Idx,0)); } + + // To reduce code size, we compactify common instructions into a few bits + // in the opcode-indexed table. + // 16 bits to play with. + unsigned BitsLeft = 16; + + std::vector > TableDrivenOperandPrinters; + + for (unsigned i = 0; ; ++i) { + std::vector UniqueOperandCommands; + + // For the first operand check, add a default value that unhandled + // instructions will use. + if (i == 0) + UniqueOperandCommands.push_back(" return false;\n"); + + std::vector InstIdxs; + FindUniqueOperandCommands(UniqueOperandCommands, InstIdxs, i); + + // If we ran out of operands to print, we're done. + if (UniqueOperandCommands.empty()) break; + + // FIXME: GROW THEM MAXIMALLY. + + // Compute the number of bits we need to represent these cases, this is + // ceil(log2(numentries)). + unsigned NumBits = Log2_32_Ceil(UniqueOperandCommands.size()); + + // If we don't have enough bits for this operand, don't include it. + if (NumBits > BitsLeft) { + DEBUG(std::cerr << "Not enough bits to densely encode " << NumBits + << " more bits\n"); + break; + } + + // Otherwise, we can include this in the initial lookup table. Add it in. + BitsLeft -= NumBits; + for (unsigned i = 0, e = InstIdxs.size(); i != e; ++i) + OpcodeInfo[i].second |= InstIdxs[i] << BitsLeft; + + TableDrivenOperandPrinters.push_back(UniqueOperandCommands); + } + + + + O<<" static const struct { unsigned short StrIdx, Bits; } OpInfo[] = {\n"; + for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { + O << " { " << OpcodeInfo[i].first << ", " << OpcodeInfo[i].second + << " },\t// " << NumberedInstructions[i]->TheDef->getName() << "\n"; + } + // Add a dummy entry so the array init doesn't end with a comma. + O << " { 65535, 65535 }\n"; O << " };\n\n"; // Emit the string itself. @@ -420,19 +535,66 @@ } O << "\";\n\n"; + O << " if (MI->getOpcode() == TargetInstrInfo::INLINEASM) {\n" + << " printInlineAsm(MI);\n" + << " return true;\n" + << " }\n\n"; + O << " // Emit the opcode for the instruction.\n" - << " O << AsmStrs+OpStrIdxs[MI->getOpcode()];\n\n"; + << " O << AsmStrs+OpInfo[MI->getOpcode()].StrIdx;\n\n"; + + // Output the table driven operand information. + O << " unsigned short Bits = OpInfo[MI->getOpcode()].Bits;\n"; - // Because this is a vector we want to emit from the end. Reverse all of the + BitsLeft = 16; + for (unsigned i = 0, e = TableDrivenOperandPrinters.size(); i != e; ++i) { + std::vector &Commands = TableDrivenOperandPrinters[i]; + + // Compute the number of bits we need to represent these cases, this is + // ceil(log2(numentries)). + unsigned NumBits = Log2_32_Ceil(Commands.size()); + assert(NumBits <= BitsLeft && "consistency error"); + + // Emit code to extract this field from Bits. + BitsLeft -= NumBits; + + O << "\n // Fragment " << i << " encoded into " << NumBits + << " bits for " << Commands.size() << " unique commands.\n" + << " switch ((Bits >> " << BitsLeft << ") & " << ((1 << NumBits)-1) + << ") {\n" + << " default: // unreachable.\n"; + + // Print out all the cases. + for (unsigned i = 0, e = Commands.size(); i != e; ++i) { + O << " case " << i << ":\n"; + O << Commands[i]; + O << " break;\n"; + } + O << " }\n\n"; + } + + // Okay, go through and strip out the operand information that we just + // emitted. + unsigned NumOpsToRemove = TableDrivenOperandPrinters.size(); + for (unsigned i = 0, e = Instructions.size(); i != e; ++i) { + // Entire instruction has been emitted? + AsmWriterInst &Inst = Instructions[i]; + if (Inst.Operands.size() <= NumOpsToRemove) { + Instructions.erase(Instructions.begin()+i); + --i; --e; + } else { + Inst.Operands.erase(Inst.Operands.begin(), + Inst.Operands.begin()+NumOpsToRemove); + } + } + + + // Because this is a vector, we want to emit from the end. Reverse all of the // elements in the vector. std::reverse(Instructions.begin(), Instructions.end()); - + // Find the opcode # of inline asm - O << " switch (MI->getOpcode()) {\n" - " default: return false;\n" - " case " << NumberedInstructions.back()->Namespace - << "::INLINEASM: printInlineAsm(MI); break;\n"; - + O << " switch (MI->getOpcode()) {\n"; while (!Instructions.empty()) EmitInstructions(Instructions, O); Index: llvm/utils/TableGen/AsmWriterEmitter.h diff -u llvm/utils/TableGen/AsmWriterEmitter.h:1.2 llvm/utils/TableGen/AsmWriterEmitter.h:1.3 --- llvm/utils/TableGen/AsmWriterEmitter.h:1.2 Thu Apr 21 19:00:35 2005 +++ llvm/utils/TableGen/AsmWriterEmitter.h Tue Jul 18 12:18:03 2006 @@ -16,16 +16,35 @@ #define ASMWRITER_EMITTER_H #include "TableGenBackend.h" +#include +#include +#include namespace llvm { - + class AsmWriterInst; + class CodeGenInstruction; + class AsmWriterEmitter : public TableGenBackend { RecordKeeper &Records; + std::map CGIAWIMap; + std::vector NumberedInstructions; public: AsmWriterEmitter(RecordKeeper &R) : Records(R) {} // run - Output the asmwriter, returning true on failure. void run(std::ostream &o); + +private: + AsmWriterInst *getAsmWriterInstByID(unsigned ID) const { + assert(ID < NumberedInstructions.size()); + std::map::const_iterator I = + CGIAWIMap.find(NumberedInstructions[ID]); + assert(I != CGIAWIMap.end() && "Didn't find inst!"); + return I->second; + } + void FindUniqueOperandCommands(std::vector &UOC, + std::vector &InstIdxs, + unsigned Op) const; }; } #endif From lattner at cs.uiuc.edu Tue Jul 18 12:32:40 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 12:32:40 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/AsmWriterEmitter.cpp Message-ID: <200607181732.MAA26543@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: AsmWriterEmitter.cpp updated: 1.31 -> 1.32 --- Log message: Merge operand info and asmstr idx into a single 32-bit field. No other change. --- Diffs of the changes: (+18 -16) AsmWriterEmitter.cpp | 34 ++++++++++++++++++---------------- 1 files changed, 18 insertions(+), 16 deletions(-) Index: llvm/utils/TableGen/AsmWriterEmitter.cpp diff -u llvm/utils/TableGen/AsmWriterEmitter.cpp:1.31 llvm/utils/TableGen/AsmWriterEmitter.cpp:1.32 --- llvm/utils/TableGen/AsmWriterEmitter.cpp:1.31 Tue Jul 18 12:18:03 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.cpp Tue Jul 18 12:32:27 2006 @@ -423,10 +423,11 @@ std::string AggregateString; AggregateString += '\0'; - /// OpcodeInfo - The first value in the pair is the index into the string, the - /// second is an index used for operand printing information. - std::vector > OpcodeInfo; + /// OpcodeInfo - Theis encodes the index of the string to use for the first + /// chunk of the output as well as indices used for operand printing. + std::vector OpcodeInfo; + unsigned MaxStringIdx = 0; for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { AsmWriterInst *AWI = CGIAWIMap[NumberedInstructions[i]]; unsigned Idx; @@ -437,21 +438,23 @@ unsigned &Entry = StringOffset[AWI->Operands[0].Str]; if (Entry == 0) { // Add the string to the aggregate if this is the first time found. - Entry = AggregateString.size(); + MaxStringIdx = Entry = AggregateString.size(); std::string Str = AWI->Operands[0].Str; UnescapeString(Str); AggregateString += Str; AggregateString += '\0'; } Idx = Entry; - assert(Entry < 65536 && "Must not use unsigned short for table idx!"); // Nuke the string from the operand list. It is now handled! AWI->Operands.erase(AWI->Operands.begin()); } - OpcodeInfo.push_back(std::pair(Idx,0)); + OpcodeInfo.push_back(Idx); } + // Figure out how many bits we used for the string index. + unsigned AsmStrBits = Log2_32_Ceil(MaxStringIdx); + // To reduce code size, we compactify common instructions into a few bits // in the opcode-indexed table. // 16 bits to play with. @@ -489,20 +492,20 @@ // Otherwise, we can include this in the initial lookup table. Add it in. BitsLeft -= NumBits; for (unsigned i = 0, e = InstIdxs.size(); i != e; ++i) - OpcodeInfo[i].second |= InstIdxs[i] << BitsLeft; + OpcodeInfo[i] |= InstIdxs[i] << (BitsLeft+AsmStrBits); TableDrivenOperandPrinters.push_back(UniqueOperandCommands); } - O<<" static const struct { unsigned short StrIdx, Bits; } OpInfo[] = {\n"; + O<<" static const unsigned OpInfo[] = {\n"; for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { - O << " { " << OpcodeInfo[i].first << ", " << OpcodeInfo[i].second - << " },\t// " << NumberedInstructions[i]->TheDef->getName() << "\n"; + O << " " << OpcodeInfo[i] << ",\t// " + << NumberedInstructions[i]->TheDef->getName() << "\n"; } // Add a dummy entry so the array init doesn't end with a comma. - O << " { 65535, 65535 }\n"; + O << " 0U\n"; O << " };\n\n"; // Emit the string itself. @@ -541,11 +544,10 @@ << " }\n\n"; O << " // Emit the opcode for the instruction.\n" - << " O << AsmStrs+OpInfo[MI->getOpcode()].StrIdx;\n\n"; + << " unsigned Bits = OpInfo[MI->getOpcode()];\n" + << " O << AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << ");\n\n"; // Output the table driven operand information. - O << " unsigned short Bits = OpInfo[MI->getOpcode()].Bits;\n"; - BitsLeft = 16; for (unsigned i = 0, e = TableDrivenOperandPrinters.size(); i != e; ++i) { std::vector &Commands = TableDrivenOperandPrinters[i]; @@ -560,8 +562,8 @@ O << "\n // Fragment " << i << " encoded into " << NumBits << " bits for " << Commands.size() << " unique commands.\n" - << " switch ((Bits >> " << BitsLeft << ") & " << ((1 << NumBits)-1) - << ") {\n" + << " switch ((Bits >> " << (BitsLeft+AsmStrBits) << ") & " + << ((1 << NumBits)-1) << ") {\n" << " default: // unreachable.\n"; // Print out all the cases. From lattner at cs.uiuc.edu Tue Jul 18 12:38:59 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 12:38:59 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/AsmWriterEmitter.cpp Message-ID: <200607181738.MAA06069@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: AsmWriterEmitter.cpp updated: 1.32 -> 1.33 --- Log message: Steal bits from the asm string index to use for operand information. On both x86 and ppc, this gets us 4 more bits to play with, since the string indices both only use 12 bits. --- Diffs of the changes: (+12 -10) AsmWriterEmitter.cpp | 22 ++++++++++++---------- 1 files changed, 12 insertions(+), 10 deletions(-) Index: llvm/utils/TableGen/AsmWriterEmitter.cpp diff -u llvm/utils/TableGen/AsmWriterEmitter.cpp:1.32 llvm/utils/TableGen/AsmWriterEmitter.cpp:1.33 --- llvm/utils/TableGen/AsmWriterEmitter.cpp:1.32 Tue Jul 18 12:32:27 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.cpp Tue Jul 18 12:38:46 2006 @@ -457,8 +457,7 @@ // To reduce code size, we compactify common instructions into a few bits // in the opcode-indexed table. - // 16 bits to play with. - unsigned BitsLeft = 16; + unsigned BitsLeft = 32-AsmStrBits; std::vector > TableDrivenOperandPrinters; @@ -501,7 +500,7 @@ O<<" static const unsigned OpInfo[] = {\n"; for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { - O << " " << OpcodeInfo[i] << ",\t// " + O << " " << OpcodeInfo[i] << "U,\t// " << NumberedInstructions[i]->TheDef->getName() << "\n"; } // Add a dummy entry so the array init doesn't end with a comma. @@ -548,7 +547,7 @@ << " O << AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << ");\n\n"; // Output the table driven operand information. - BitsLeft = 16; + BitsLeft = 32-AsmStrBits; for (unsigned i = 0, e = TableDrivenOperandPrinters.size(); i != e; ++i) { std::vector &Commands = TableDrivenOperandPrinters[i]; @@ -595,12 +594,15 @@ // elements in the vector. std::reverse(Instructions.begin(), Instructions.end()); - // Find the opcode # of inline asm - O << " switch (MI->getOpcode()) {\n"; - while (!Instructions.empty()) - EmitInstructions(Instructions, O); + if (!Instructions.empty()) { + // Find the opcode # of inline asm. + O << " switch (MI->getOpcode()) {\n"; + while (!Instructions.empty()) + EmitInstructions(Instructions, O); - O << " }\n" - " return true;\n" + O << " }\n"; + } + + O << " return true;\n" "}\n"; } From lattner at cs.uiuc.edu Tue Jul 18 12:44:07 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 12:44:07 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/AsmWriterEmitter.cpp Message-ID: <200607181744.MAA26898@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: AsmWriterEmitter.cpp updated: 1.33 -> 1.34 --- Log message: Emit switches with 1/2 cases as unconditional code or an if/then/else for tidyness. --- Diffs of the changes: (+24 -10) AsmWriterEmitter.cpp | 34 ++++++++++++++++++++++++---------- 1 files changed, 24 insertions(+), 10 deletions(-) Index: llvm/utils/TableGen/AsmWriterEmitter.cpp diff -u llvm/utils/TableGen/AsmWriterEmitter.cpp:1.33 llvm/utils/TableGen/AsmWriterEmitter.cpp:1.34 --- llvm/utils/TableGen/AsmWriterEmitter.cpp:1.33 Tue Jul 18 12:38:46 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.cpp Tue Jul 18 12:43:54 2006 @@ -560,18 +560,32 @@ BitsLeft -= NumBits; O << "\n // Fragment " << i << " encoded into " << NumBits - << " bits for " << Commands.size() << " unique commands.\n" - << " switch ((Bits >> " << (BitsLeft+AsmStrBits) << ") & " - << ((1 << NumBits)-1) << ") {\n" - << " default: // unreachable.\n"; + << " bits for " << Commands.size() << " unique commands.\n"; - // Print out all the cases. - for (unsigned i = 0, e = Commands.size(); i != e; ++i) { - O << " case " << i << ":\n"; - O << Commands[i]; - O << " break;\n"; + if (Commands.size() == 1) { + // Only one possibility, just emit it. + O << Commands[0]; + } else if (Commands.size() == 2) { + // Emit two possibilitys with if/else. + O << " if ((Bits >> " << (BitsLeft+AsmStrBits) << ") & " + << ((1 << NumBits)-1) << ") {\n" + << Commands[1] + << " } else {\n" + << Commands[0] + << " }\n\n"; + } else { + O << " switch ((Bits >> " << (BitsLeft+AsmStrBits) << ") & " + << ((1 << NumBits)-1) << ") {\n" + << " default: // unreachable.\n"; + + // Print out all the cases. + for (unsigned i = 0, e = Commands.size(); i != e; ++i) { + O << " case " << i << ":\n"; + O << Commands[i]; + O << " break;\n"; + } + O << " }\n\n"; } - O << " }\n\n"; } // Okay, go through and strip out the operand information that we just From lattner at cs.uiuc.edu Tue Jul 18 12:50:35 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 12:50:35 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/AsmWriterEmitter.cpp Message-ID: <200607181750.MAA27334@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: AsmWriterEmitter.cpp updated: 1.34 -> 1.35 --- Log message: Handle the last operand more intelligently. When emitting the \n, also return from the asmprinter to make the generated asmprinter both more efficient and smaller. --- Diffs of the changes: (+7 -5) AsmWriterEmitter.cpp | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) Index: llvm/utils/TableGen/AsmWriterEmitter.cpp diff -u llvm/utils/TableGen/AsmWriterEmitter.cpp:1.34 llvm/utils/TableGen/AsmWriterEmitter.cpp:1.35 --- llvm/utils/TableGen/AsmWriterEmitter.cpp:1.34 Tue Jul 18 12:43:54 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.cpp Tue Jul 18 12:50:22 2006 @@ -345,12 +345,14 @@ if (Inst == 0) continue; // PHI, INLINEASM, etc. std::string Command; - if (Op > Inst->Operands.size()) + if (Op >= Inst->Operands.size()) continue; // Instruction already done. - else if (Op == Inst->Operands.size()) - Command = " return true;\n"; - else - Command = " " + Inst->Operands[Op].getCode() + "\n"; + + Command = " " + Inst->Operands[Op].getCode() + "\n"; + + // If this is the last operand, emit a return. + if (Op == Inst->Operands.size()-1) + Command += " return true;\n"; // Check to see if we already have 'Command' in UniqueOperandCommands. // If not, add it. From lattner at cs.uiuc.edu Tue Jul 18 12:56:20 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 12:56:20 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/AsmWriterEmitter.cpp AsmWriterEmitter.h Message-ID: <200607181756.MAA28666@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: AsmWriterEmitter.cpp updated: 1.35 -> 1.36 AsmWriterEmitter.h updated: 1.3 -> 1.4 --- Log message: Change generator to remove operands as it processes them. No change in generated file. --- Diffs of the changes: (+22 -17) AsmWriterEmitter.cpp | 36 +++++++++++++++++++++--------------- AsmWriterEmitter.h | 3 +-- 2 files changed, 22 insertions(+), 17 deletions(-) Index: llvm/utils/TableGen/AsmWriterEmitter.cpp diff -u llvm/utils/TableGen/AsmWriterEmitter.cpp:1.35 llvm/utils/TableGen/AsmWriterEmitter.cpp:1.36 --- llvm/utils/TableGen/AsmWriterEmitter.cpp:1.35 Tue Jul 18 12:50:22 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.cpp Tue Jul 18 12:56:07 2006 @@ -330,7 +330,7 @@ void AsmWriterEmitter:: FindUniqueOperandCommands(std::vector &UniqueOperandCommands, - std::vector &InstIdxs, unsigned Op) const { + std::vector &InstIdxs) const { InstIdxs.clear(); InstIdxs.resize(NumberedInstructions.size()); @@ -345,13 +345,13 @@ if (Inst == 0) continue; // PHI, INLINEASM, etc. std::string Command; - if (Op >= Inst->Operands.size()) + if (Inst->Operands.empty()) continue; // Instruction already done. - Command = " " + Inst->Operands[Op].getCode() + "\n"; + Command = " " + Inst->Operands[0].getCode() + "\n"; // If this is the last operand, emit a return. - if (Op == Inst->Operands.size()-1) + if (Inst->Operands.size() == 1) Command += " return true;\n"; // Check to see if we already have 'Command' in UniqueOperandCommands. @@ -463,16 +463,19 @@ std::vector > TableDrivenOperandPrinters; - for (unsigned i = 0; ; ++i) { + bool isFirst = true; + while (1) { std::vector UniqueOperandCommands; // For the first operand check, add a default value that unhandled // instructions will use. - if (i == 0) + if (isFirst) { UniqueOperandCommands.push_back(" return false;\n"); + isFirst = false; + } std::vector InstIdxs; - FindUniqueOperandCommands(UniqueOperandCommands, InstIdxs, i); + FindUniqueOperandCommands(UniqueOperandCommands, InstIdxs); // If we ran out of operands to print, we're done. if (UniqueOperandCommands.empty()) break; @@ -495,6 +498,14 @@ for (unsigned i = 0, e = InstIdxs.size(); i != e; ++i) OpcodeInfo[i] |= InstIdxs[i] << (BitsLeft+AsmStrBits); + // Remove the info about this operand. + for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { + if (AsmWriterInst *Inst = getAsmWriterInstByID(i)) + if (!Inst->Operands.empty()) + Inst->Operands.erase(Inst->Operands.begin()); + } + + // Remember the handlers for this set of operands. TableDrivenOperandPrinters.push_back(UniqueOperandCommands); } @@ -590,18 +601,13 @@ } } - // Okay, go through and strip out the operand information that we just - // emitted. - unsigned NumOpsToRemove = TableDrivenOperandPrinters.size(); + // Okay, delete instructions with no operand info left. for (unsigned i = 0, e = Instructions.size(); i != e; ++i) { // Entire instruction has been emitted? AsmWriterInst &Inst = Instructions[i]; - if (Inst.Operands.size() <= NumOpsToRemove) { + if (Inst.Operands.empty()) { Instructions.erase(Instructions.begin()+i); - --i; --e; - } else { - Inst.Operands.erase(Inst.Operands.begin(), - Inst.Operands.begin()+NumOpsToRemove); + --i; --e; } } Index: llvm/utils/TableGen/AsmWriterEmitter.h diff -u llvm/utils/TableGen/AsmWriterEmitter.h:1.3 llvm/utils/TableGen/AsmWriterEmitter.h:1.4 --- llvm/utils/TableGen/AsmWriterEmitter.h:1.3 Tue Jul 18 12:18:03 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.h Tue Jul 18 12:56:07 2006 @@ -43,8 +43,7 @@ return I->second; } void FindUniqueOperandCommands(std::vector &UOC, - std::vector &InstIdxs, - unsigned Op) const; + std::vector &InstIdxs) const; }; } #endif From pjenkins at apple.com Tue Jul 18 12:21:43 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Tue, 18 Jul 2006 12:21:43 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607181721.MAA05448@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.13 -> 1.14 --- Log message: Minor output changes. --- Diffs of the changes: (+4 -1) NewNightlyTest.pl | 5 ++++- 1 files changed, 4 insertions(+), 1 deletion(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.13 llvm/utils/NewNightlyTest.pl:1.14 --- llvm/utils/NewNightlyTest.pl:1.13 Mon Jul 17 11:41:19 2006 +++ llvm/utils/NewNightlyTest.pl Tue Jul 18 12:21:30 2006 @@ -144,6 +144,7 @@ $GCCPATH=$ARGV[0]; shift; next;} + else{ $GCCPATH=""; } if (/^-cvstag/) { $CVSCOOPT .= " -r $ARGV[0]"; shift; next; } else{ $CVSCOOPT="";} if (/^-target/) { @@ -960,11 +961,13 @@ @DEJAGNULOG_FULL = ReadFile "$DejagnuTestsLog"; $dejagnulog_full = join("\n", @DEJAGNULOG_FULL); -if($GCCPATH){ +if($GCCPATH ne ""){ my $gcc_version_long = `$GCCPATH/gcc --version`; + print "$GCCPATH/gcc --version\n"; } else{ my $gcc_version_long = `gcc --version`; + print "gcc --version\n"; } @GCC_VERSION = split "\n", $gcc_version_long; my $gcc_version = $GCC_VERSION[0]; From pjenkins at apple.com Tue Jul 18 12:13:57 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Tue, 18 Jul 2006 12:13:57 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607181713.MAA05294@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.17 -> 1.18 --- Log message: Changed the email code to pipe the message of the email to mail instead of creating a file and then redirecting the the input. --- Diffs of the changes: (+4 -5) NightlyTestAccept.cgi | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.17 nightlytest-serverside/NightlyTestAccept.cgi:1.18 --- nightlytest-serverside/NightlyTestAccept.cgi:1.17 Mon Jul 17 16:51:02 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Tue Jul 18 12:13:44 2006 @@ -451,12 +451,11 @@ # ###################################################################################################### -$email = "$machine_data\n\n$dejagnutests_log\n\ncvs user commit list:\n$cvsusercommitlist\n\ncvs user ". - "update list:\n$cvsuserupdatelist\n\ncvs changed files:\n$cvsmodifiedfiles\n"; -WriteFile "email.txt", $email; +$email = "$machine_data\n\nBuild Status: $buildstatus\n\ncvs user commit list:\n". + "$cvsusercommitlist\n\ncvs user ". + "update list:\n$cvsuserupdatelist\n\ncvs changed files:\n$cvsmodifiedfiles\n"; $email_addr = "llvm-testresults\@cs.uiuc.edu"; -`mail -s '$nickname $hardware nightly tester results' $email_addr < email.txt`; -`rm -f email.txt`; +`echo "$email" | mail -s '$nickname $hardware nightly tester results' $email_addr`; ###################################################################################################### # From lattner at cs.uiuc.edu Tue Jul 18 13:28:41 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 13:28:41 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/AsmWriterEmitter.cpp AsmWriterEmitter.h Message-ID: <200607181828.NAA06407@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: AsmWriterEmitter.cpp updated: 1.36 -> 1.37 AsmWriterEmitter.h updated: 1.4 -> 1.5 --- Log message: Maximally group commands. When all instructions within a command set have a series of identical commands, handle them all with one switch. In the case of the x86 at&t asm printer, only 3 switches are needed for all instructions. --- Diffs of the changes: (+70 -13) AsmWriterEmitter.cpp | 80 +++++++++++++++++++++++++++++++++++++++++++-------- AsmWriterEmitter.h | 3 + 2 files changed, 70 insertions(+), 13 deletions(-) Index: llvm/utils/TableGen/AsmWriterEmitter.cpp diff -u llvm/utils/TableGen/AsmWriterEmitter.cpp:1.36 llvm/utils/TableGen/AsmWriterEmitter.cpp:1.37 --- llvm/utils/TableGen/AsmWriterEmitter.cpp:1.36 Tue Jul 18 12:56:07 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.cpp Tue Jul 18 13:28:27 2006 @@ -330,15 +330,16 @@ void AsmWriterEmitter:: FindUniqueOperandCommands(std::vector &UniqueOperandCommands, - std::vector &InstIdxs) const { - InstIdxs.clear(); - InstIdxs.resize(NumberedInstructions.size()); + std::vector &InstIdxs, + std::vector &InstOpsUsed) const { + InstIdxs.assign(NumberedInstructions.size(), 0); // This vector parallels UniqueOperandCommands, keeping track of which // instructions each case are used for. It is a comma separated string of // enums. std::vector InstrsForCase; InstrsForCase.resize(UniqueOperandCommands.size()); + InstOpsUsed.assign(UniqueOperandCommands.size(), 0); for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { const AsmWriterInst *Inst = getAsmWriterInstByID(i); @@ -369,6 +370,61 @@ InstIdxs[i] = UniqueOperandCommands.size(); UniqueOperandCommands.push_back(Command); InstrsForCase.push_back(Inst->CGI->TheDef->getName()); + + // This command matches one operand so far. + InstOpsUsed.push_back(1); + } + } + + // For each entry of UniqueOperandCommands, there is a set of instructions + // that uses it. If the next command of all instructions in the set are + // identical, fold it into the command. + for (unsigned CommandIdx = 0, e = UniqueOperandCommands.size(); + CommandIdx != e; ++CommandIdx) { + + for (unsigned Op = 1; ; ++Op) { + // Scan for the first instruction in the set. + std::vector::iterator NIT = + std::find(InstIdxs.begin(), InstIdxs.end(), CommandIdx); + if (NIT == InstIdxs.end()) break; // No commonality. + + // If this instruction has no more operands, we isn't anything to merge + // into this command. + const AsmWriterInst *FirstInst = + getAsmWriterInstByID(NIT-InstIdxs.begin()); + if (!FirstInst || FirstInst->Operands.size() == Op) + break; + + // Otherwise, scan to see if all of the other instructions in this command + // set share the operand. + bool AllSame = true; + + NIT = std::find(NIT+1, InstIdxs.end(), CommandIdx); + for (NIT = std::find(NIT+1, InstIdxs.end(), CommandIdx); + NIT != InstIdxs.end(); + NIT = std::find(NIT+1, InstIdxs.end(), CommandIdx)) { + // Okay, found another instruction in this command set. If the operand + // matches, we're ok, otherwise bail out. + const AsmWriterInst *OtherInst = + getAsmWriterInstByID(NIT-InstIdxs.begin()); + if (!OtherInst || OtherInst->Operands.size() == Op || + OtherInst->Operands[Op] != FirstInst->Operands[Op]) { + AllSame = false; + break; + } + } + if (!AllSame) break; + + // Okay, everything in this command set has the same next operand. Add it + // to UniqueOperandCommands and remember that it was consumed. + std::string Command = " " + FirstInst->Operands[Op].getCode() + "\n"; + + // If this is the last operand, emit a return after the code. + if (FirstInst->Operands.size() == Op+1) + Command += " return true;\n"; + + UniqueOperandCommands[CommandIdx] += Command; + InstOpsUsed[CommandIdx]++; } } @@ -475,13 +531,13 @@ } std::vector InstIdxs; - FindUniqueOperandCommands(UniqueOperandCommands, InstIdxs); + std::vector NumInstOpsHandled; + FindUniqueOperandCommands(UniqueOperandCommands, InstIdxs, + NumInstOpsHandled); // If we ran out of operands to print, we're done. if (UniqueOperandCommands.empty()) break; - // FIXME: GROW THEM MAXIMALLY. - // Compute the number of bits we need to represent these cases, this is // ceil(log2(numentries)). unsigned NumBits = Log2_32_Ceil(UniqueOperandCommands.size()); @@ -501,8 +557,11 @@ // Remove the info about this operand. for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { if (AsmWriterInst *Inst = getAsmWriterInstByID(i)) - if (!Inst->Operands.empty()) - Inst->Operands.erase(Inst->Operands.begin()); + if (!Inst->Operands.empty()) { + unsigned NumOps = NumInstOpsHandled[InstIdxs[i]]; + Inst->Operands.erase(Inst->Operands.begin(), + Inst->Operands.begin()+NumOps); + } } // Remember the handlers for this set of operands. @@ -575,10 +634,7 @@ O << "\n // Fragment " << i << " encoded into " << NumBits << " bits for " << Commands.size() << " unique commands.\n"; - if (Commands.size() == 1) { - // Only one possibility, just emit it. - O << Commands[0]; - } else if (Commands.size() == 2) { + if (Commands.size() == 2) { // Emit two possibilitys with if/else. O << " if ((Bits >> " << (BitsLeft+AsmStrBits) << ") & " << ((1 << NumBits)-1) << ") {\n" Index: llvm/utils/TableGen/AsmWriterEmitter.h diff -u llvm/utils/TableGen/AsmWriterEmitter.h:1.4 llvm/utils/TableGen/AsmWriterEmitter.h:1.5 --- llvm/utils/TableGen/AsmWriterEmitter.h:1.4 Tue Jul 18 12:56:07 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.h Tue Jul 18 13:28:27 2006 @@ -43,7 +43,8 @@ return I->second; } void FindUniqueOperandCommands(std::vector &UOC, - std::vector &InstIdxs) const; + std::vector &InstIdxs, + std::vector &InstOpsUsed) const; }; } #endif From lattner at cs.uiuc.edu Tue Jul 18 14:06:13 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 14:06:13 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/AsmWriterEmitter.cpp Message-ID: <200607181906.OAA16614@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: AsmWriterEmitter.cpp updated: 1.37 -> 1.38 --- Log message: Fix an accidentally duplicated line that caused tblgen to crash on itanium. Add an assert that catches the real problem earlier. --- Diffs of the changes: (+4 -3) AsmWriterEmitter.cpp | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) Index: llvm/utils/TableGen/AsmWriterEmitter.cpp diff -u llvm/utils/TableGen/AsmWriterEmitter.cpp:1.37 llvm/utils/TableGen/AsmWriterEmitter.cpp:1.38 --- llvm/utils/TableGen/AsmWriterEmitter.cpp:1.37 Tue Jul 18 13:28:27 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.cpp Tue Jul 18 14:06:01 2006 @@ -399,7 +399,6 @@ // set share the operand. bool AllSame = true; - NIT = std::find(NIT+1, InstIdxs.end(), CommandIdx); for (NIT = std::find(NIT+1, InstIdxs.end(), CommandIdx); NIT != InstIdxs.end(); NIT = std::find(NIT+1, InstIdxs.end(), CommandIdx)) { @@ -559,6 +558,8 @@ if (AsmWriterInst *Inst = getAsmWriterInstByID(i)) if (!Inst->Operands.empty()) { unsigned NumOps = NumInstOpsHandled[InstIdxs[i]]; + assert(NumOps <= Inst->Operands.size() && + "Can't remove this many ops!"); Inst->Operands.erase(Inst->Operands.begin(), Inst->Operands.begin()+NumOps); } @@ -679,8 +680,8 @@ EmitInstructions(Instructions, O); O << " }\n"; + O << " return true;\n"; } - O << " return true;\n" - "}\n"; + O << "}\n"; } From evan.cheng at apple.com Tue Jul 18 14:08:15 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 18 Jul 2006 14:08:15 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp Message-ID: <200607181908.OAA18204@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LoopStrengthReduce.cpp updated: 1.85 -> 1.86 --- Log message: Only reuse a previous IV if it would not require a type conversion. --- Diffs of the changes: (+17 -14) LoopStrengthReduce.cpp | 31 +++++++++++++++++-------------- 1 files changed, 17 insertions(+), 14 deletions(-) Index: llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp diff -u llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:1.85 llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:1.86 --- llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:1.85 Wed Jun 28 18:17:24 2006 +++ llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp Tue Jul 18 14:07:58 2006 @@ -187,7 +187,7 @@ void OptimizeIndvars(Loop *L); - unsigned CheckForIVReuse(const SCEVHandle &Stride, IVExpr &IV); + unsigned CheckForIVReuse(const SCEVHandle&, IVExpr&, const Type*); void StrengthReduceStridedIVUsers(const SCEVHandle &Stride, IVUsersOfOneStride &Uses, @@ -872,7 +872,7 @@ /// mode scale component. This allows the users of this stride to be rewritten /// as prev iv * factor. It returns 0 if no reuse is possible. unsigned LoopStrengthReduce::CheckForIVReuse(const SCEVHandle &Stride, - IVExpr &IV) { + IVExpr &IV, const Type *Ty) { if (!TLI) return 0; if (SCEVConstant *SC = dyn_cast(Stride)) { @@ -892,7 +892,9 @@ for (std::vector::iterator II = SI->second.IVs.begin(), IE = SI->second.IVs.end(); II != IE; ++II) // FIXME: Only handle base == 0 for now. - if (isZero(II->Base)) { + // Only reuse previous IV if it would not require a type conversion. + if (isZero(II->Base) && + II->Base->getType()->isLosslesslyConvertibleTo(Ty)) { IV = *II; return Scale; } @@ -929,13 +931,24 @@ "Base value is not loop invariant!"); } + // We now have a whole bunch of uses of like-strided induction variables, but + // they might all have different bases. We want to emit one PHI node for this + // stride which we fold as many common expressions (between the IVs) into as + // possible. Start by identifying the common expressions in the base values + // for the strides (e.g. if we have "A+C+B" and "A+B+D" as our bases, find + // "A+B"), emit it to the preheader, then remove the expression from the + // UsersToProcess base values. + SCEVHandle CommonExprs = + RemoveCommonExpressionsFromUseBases(UsersToProcess); + // Check if it is possible to reuse a IV with stride that is factor of this // stride. And the multiple is a number that can be encoded in the scale // field of the target addressing mode. PHINode *NewPHI = NULL; Value *IncV = NULL; IVExpr ReuseIV; - unsigned RewriteFactor = CheckForIVReuse(Stride, ReuseIV); + unsigned RewriteFactor = CheckForIVReuse(Stride, ReuseIV, + CommonExprs->getType()); if (RewriteFactor != 0) { DEBUG(std::cerr << "BASED ON IV of STRIDE " << *ReuseIV.Stride << " and BASE " << *ReuseIV.Base << " :\n"); @@ -943,16 +956,6 @@ IncV = ReuseIV.IncV; } - // We now have a whole bunch of uses of like-strided induction variables, but - // they might all have different bases. We want to emit one PHI node for this - // stride which we fold as many common expressions (between the IVs) into as - // possible. Start by identifying the common expressions in the base values - // for the strides (e.g. if we have "A+C+B" and "A+B+D" as our bases, find - // "A+B"), emit it to the preheader, then remove the expression from the - // UsersToProcess base values. - SCEVHandle CommonExprs = - RemoveCommonExpressionsFromUseBases(UsersToProcess); - // Next, figure out what we can represent in the immediate fields of // instructions. If we can represent anything there, move it to the imm // fields of the BasedUsers. We do this so that it increases the commonality From lattner at cs.uiuc.edu Tue Jul 18 14:27:43 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 14:27:43 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/AsmWriterEmitter.cpp Message-ID: <200607181927.OAA26870@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: AsmWriterEmitter.cpp updated: 1.38 -> 1.39 --- Log message: Fix case where identical cases were not detected across case #0, because instructions not handled would have a case value of #0, throwing things off. This marginally shrinks the X86 asmprinter, but shrinks the sparc asmwriter by 25 lines. --- Diffs of the changes: (+3 -2) AsmWriterEmitter.cpp | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) Index: llvm/utils/TableGen/AsmWriterEmitter.cpp diff -u llvm/utils/TableGen/AsmWriterEmitter.cpp:1.38 llvm/utils/TableGen/AsmWriterEmitter.cpp:1.39 --- llvm/utils/TableGen/AsmWriterEmitter.cpp:1.38 Tue Jul 18 14:06:01 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.cpp Tue Jul 18 14:27:30 2006 @@ -332,7 +332,7 @@ FindUniqueOperandCommands(std::vector &UniqueOperandCommands, std::vector &InstIdxs, std::vector &InstOpsUsed) const { - InstIdxs.assign(NumberedInstructions.size(), 0); + InstIdxs.assign(NumberedInstructions.size(), ~0U); // This vector parallels UniqueOperandCommands, keeping track of which // instructions each case are used for. It is a comma separated string of @@ -551,7 +551,8 @@ // Otherwise, we can include this in the initial lookup table. Add it in. BitsLeft -= NumBits; for (unsigned i = 0, e = InstIdxs.size(); i != e; ++i) - OpcodeInfo[i] |= InstIdxs[i] << (BitsLeft+AsmStrBits); + if (InstIdxs[i] != ~0U) + OpcodeInfo[i] |= InstIdxs[i] << (BitsLeft+AsmStrBits); // Remove the info about this operand. for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { From pjenkins at apple.com Tue Jul 18 16:22:05 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Tue, 18 Jul 2006 16:22:05 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607182122.QAA11424@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.14 -> 1.15 --- Log message: yet another change to get the correct gcc version for the nightly test results. --- Diffs of the changes: (+4 -3) NewNightlyTest.pl | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.14 llvm/utils/NewNightlyTest.pl:1.15 --- llvm/utils/NewNightlyTest.pl:1.14 Tue Jul 18 12:21:30 2006 +++ llvm/utils/NewNightlyTest.pl Tue Jul 18 16:21:53 2006 @@ -961,15 +961,16 @@ @DEJAGNULOG_FULL = ReadFile "$DejagnuTestsLog"; $dejagnulog_full = join("\n", @DEJAGNULOG_FULL); +my $gcc_version_long=""; if($GCCPATH ne ""){ - my $gcc_version_long = `$GCCPATH/gcc --version`; + $gcc_version_long = `$GCCPATH/gcc --version`; print "$GCCPATH/gcc --version\n"; } else{ - my $gcc_version_long = `gcc --version`; + $gcc_version_long = `gcc --version`; print "gcc --version\n"; } - at GCC_VERSION = split "\n", $gcc_version_long; + at GCC_VERSION = split '\n', $gcc_version_long; my $gcc_version = $GCC_VERSION[0]; ############################################################## From lattner at cs.uiuc.edu Tue Jul 18 16:49:10 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 16:49:10 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/InlineFunction.cpp Message-ID: <200607182149.QAA00786@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: InlineFunction.cpp updated: 1.45 -> 1.46 --- Log message: silence warnings in a release build --- Diffs of the changes: (+1 -1) InlineFunction.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Transforms/Utils/InlineFunction.cpp diff -u llvm/lib/Transforms/Utils/InlineFunction.cpp:1.45 llvm/lib/Transforms/Utils/InlineFunction.cpp:1.46 --- llvm/lib/Transforms/Utils/InlineFunction.cpp:1.45 Wed Jul 12 16:37:11 2006 +++ llvm/lib/Transforms/Utils/InlineFunction.cpp Tue Jul 18 16:48:57 2006 @@ -275,7 +275,7 @@ // If we are preserving the callgraph, add edges to the stacksave/restore // functions for the calls we insert. - CallGraphNode *StackSaveCGN, *StackRestoreCGN, *CallerNode; + CallGraphNode *StackSaveCGN = 0, *StackRestoreCGN = 0, *CallerNode = 0; if (CG) { StackSaveCGN = CG->getOrInsertFunction(StackSave); StackRestoreCGN = CG->getOrInsertFunction(StackRestore); From evan.cheng at apple.com Tue Jul 18 17:19:14 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 18 Jul 2006 17:19:14 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/RegisterInfoEmitter.cpp Message-ID: <200607182219.RAA08625@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: RegisterInfoEmitter.cpp updated: 1.45 -> 1.46 --- Log message: Make sub- super- reg-class tables static. --- Diffs of the changes: (+6 -3) RegisterInfoEmitter.cpp | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) Index: llvm/utils/TableGen/RegisterInfoEmitter.cpp diff -u llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.45 llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.46 --- llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.45 Wed Jun 14 19:16:37 2006 +++ llvm/utils/TableGen/RegisterInfoEmitter.cpp Tue Jul 18 17:18:31 2006 @@ -127,7 +127,8 @@ std::string Name = RC.TheDef->getName(); // Emit the register list now. - OS << " // " << Name << " Register Class...\n const unsigned " << Name + OS << " // " << Name << " Register Class...\n" + << " static const unsigned " << Name << "[] = {\n "; for (unsigned i = 0, e = RC.Elements.size(); i != e; ++i) { Record *Reg = RC.Elements[i]; @@ -180,7 +181,8 @@ } OS << " // " << Name - << " Register Class sub-classes...\n const TargetRegisterClass* " + << " Register Class sub-classes...\n" + << " static const TargetRegisterClass* " << Name << "Subclasses [] = {\n "; bool Empty = true; @@ -214,7 +216,8 @@ std::string Name = RC.TheDef->getName(); OS << " // " << Name - << " Register Class super-classes...\n const TargetRegisterClass* " + << " Register Class super-classes...\n" + << " static const TargetRegisterClass* " << Name << "Superclasses [] = {\n "; bool Empty = true; From lattner at cs.uiuc.edu Tue Jul 18 18:59:59 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 18:59:59 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Support/CommandLine.h Message-ID: <200607182359.SAA03177@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Support: CommandLine.h updated: 1.54 -> 1.55 --- Log message: Add an out-of-line virtual method to provide a home for the cl::option class. --- Diffs of the changes: (+3 -0) CommandLine.h | 3 +++ 1 files changed, 3 insertions(+) Index: llvm/include/llvm/Support/CommandLine.h diff -u llvm/include/llvm/Support/CommandLine.h:1.54 llvm/include/llvm/Support/CommandLine.h:1.55 --- llvm/include/llvm/Support/CommandLine.h:1.54 Mon Jun 5 11:22:56 2006 +++ llvm/include/llvm/Support/CommandLine.h Tue Jul 18 18:59:33 2006 @@ -150,6 +150,9 @@ return NormalFormatting; } + // Out of line virtual function to provide home for the class. + virtual void anchor(); + int NumOccurrences; // The number of times specified int Flags; // Flags for the argument unsigned Position; // Position of last occurrence of the option From lattner at cs.uiuc.edu Tue Jul 18 18:59:59 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 18:59:59 -0500 Subject: [llvm-commits] CVS: llvm/lib/Support/CommandLine.cpp Message-ID: <200607182359.SAA03178@zion.cs.uiuc.edu> Changes in directory llvm/lib/Support: CommandLine.cpp updated: 1.69 -> 1.70 --- Log message: Add an out-of-line virtual method to provide a home for the cl::option class. --- Diffs of the changes: (+4 -0) CommandLine.cpp | 4 ++++ 1 files changed, 4 insertions(+) Index: llvm/lib/Support/CommandLine.cpp diff -u llvm/lib/Support/CommandLine.cpp:1.69 llvm/lib/Support/CommandLine.cpp:1.70 --- llvm/lib/Support/CommandLine.cpp:1.69 Thu Jul 6 13:33:03 2006 +++ llvm/lib/Support/CommandLine.cpp Tue Jul 18 18:59:33 2006 @@ -607,6 +607,10 @@ // Option Base class implementation // +// Out of line virtual function to provide home for the class. +void Option::anchor() { +} + bool Option::error(std::string Message, const char *ArgName) { if (ArgName == 0) ArgName = ArgStr; if (ArgName[0] == 0) From lattner at cs.uiuc.edu Tue Jul 18 19:00:51 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 19:00:51 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Message-ID: <200607190000.TAA03424@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAG.cpp updated: 1.310 -> 1.311 --- Log message: Add an out-of-line virtual method for the sdnode class to give it a home. --- Diffs of the changes: (+4 -0) SelectionDAG.cpp | 4 ++++ 1 files changed, 4 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.310 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.311 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.310 Thu Jun 29 18:57:05 2006 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Tue Jul 18 19:00:37 2006 @@ -2702,6 +2702,10 @@ // SDNode Class //===----------------------------------------------------------------------===// +// Out-of-line virtual method to give class a home. +void SDNode::ANCHOR() { +} + /// getValueTypeList - Return a pointer to the specified value type. /// From lattner at cs.uiuc.edu Tue Jul 18 19:00:51 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 19:00:51 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/SelectionDAGNodes.h Message-ID: <200607190000.TAA03420@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: SelectionDAGNodes.h updated: 1.135 -> 1.136 --- Log message: Add an out-of-line virtual method for the sdnode class to give it a home. --- Diffs of the changes: (+3 -0) SelectionDAGNodes.h | 3 +++ 1 files changed, 3 insertions(+) Index: llvm/include/llvm/CodeGen/SelectionDAGNodes.h diff -u llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.135 llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.136 --- llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.135 Fri May 26 19:40:15 2006 +++ llvm/include/llvm/CodeGen/SelectionDAGNodes.h Tue Jul 18 19:00:37 2006 @@ -713,6 +713,9 @@ /// Uses - These are all of the SDNode's that use a value produced by this /// node. std::vector Uses; + + // Out-of-line virtual method to give class a home. + virtual void ANCHOR(); public: virtual ~SDNode() { assert(NumOperands == 0 && "Operand list not cleared before deletion"); From evan.cheng at apple.com Tue Jul 18 19:24:55 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 18 Jul 2006 19:24:55 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/DAGISelEmitter.cpp Message-ID: <200607190024.TAA09951@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: DAGISelEmitter.cpp updated: 1.222 -> 1.223 --- Log message: Add code size to target instruction use it as the 3rd isel sorting tie-breaker. --- Diffs of the changes: (+25 -3) DAGISelEmitter.cpp | 28 +++++++++++++++++++++++++--- 1 files changed, 25 insertions(+), 3 deletions(-) Index: llvm/utils/TableGen/DAGISelEmitter.cpp diff -u llvm/utils/TableGen/DAGISelEmitter.cpp:1.222 llvm/utils/TableGen/DAGISelEmitter.cpp:1.223 --- llvm/utils/TableGen/DAGISelEmitter.cpp:1.222 Sun Jul 16 01:14:37 2006 +++ llvm/utils/TableGen/DAGISelEmitter.cpp Tue Jul 18 19:24:41 2006 @@ -1986,6 +1986,21 @@ return Cost; } +/// getResultPatternCodeSize - Compute the code size of instructions for this +/// pattern. +static unsigned getResultPatternSize(TreePatternNode *P, DAGISelEmitter &ISE) { + if (P->isLeaf()) return 0; + + unsigned Cost = 0; + Record *Op = P->getOperator(); + if (Op->isSubClassOf("Instruction")) { + Cost += Op->getValueAsInt("CodeSize"); + } + for (unsigned i = 0, e = P->getNumChildren(); i != e; ++i) + Cost += getResultPatternSize(P->getChild(i), ISE); + return Cost; +} + // PatternSortingPredicate - return true if we prefer to match LHS before RHS. // In particular, we want to match maximal patterns first and lowest cost within // a particular complexity first. @@ -2003,8 +2018,13 @@ if (LHSSize < RHSSize) return false; // If the patterns have equal complexity, compare generated instruction cost - return getResultPatternCost(LHS->getDstPattern(), ISE) < - getResultPatternCost(RHS->getDstPattern(), ISE); + unsigned LHSCost = getResultPatternCost(LHS->getDstPattern(), ISE); + unsigned RHSCost = getResultPatternCost(RHS->getDstPattern(), ISE); + if (LHSCost < RHSCost) return true; + if (LHSCost > RHSCost) return false; + + return getResultPatternSize(LHS->getDstPattern(), ISE) < + getResultPatternSize(RHS->getDstPattern(), ISE); } }; @@ -3105,7 +3125,9 @@ OS << std::string(Indent, ' ') << "// Pattern complexity = " << getPatternSize(Pattern.getSrcPattern(), *this) + AddedComplexity << " cost = " - << getResultPatternCost(Pattern.getDstPattern(), *this) << "\n"; + << getResultPatternCost(Pattern.getDstPattern(), *this) + << " size = " + << getResultPatternSize(Pattern.getDstPattern(), *this) << "\n"; } if (!FirstCodeLine.first) { OS << std::string(Indent, ' ') << "{\n"; From evan.cheng at apple.com Tue Jul 18 19:24:55 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 18 Jul 2006 19:24:55 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/Target.td Message-ID: <200607190024.TAA09947@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target: Target.td updated: 1.84 -> 1.85 --- Log message: Add code size to target instruction use it as the 3rd isel sorting tie-breaker. --- Diffs of the changes: (+3 -0) Target.td | 3 +++ 1 files changed, 3 insertions(+) Index: llvm/lib/Target/Target.td diff -u llvm/lib/Target/Target.td:1.84 llvm/lib/Target/Target.td:1.85 --- llvm/lib/Target/Target.td:1.84 Thu May 18 15:44:26 2006 +++ llvm/lib/Target/Target.td Tue Jul 18 19:24:41 2006 @@ -147,6 +147,9 @@ // code. list Predicates = []; + // Code size. + int CodeSize = 0; + // Added complexity passed onto matching pattern. int AddedComplexity = 0; From evan.cheng at apple.com Tue Jul 18 19:27:42 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 18 Jul 2006 19:27:42 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86InstrInfo.td X86InstrMMX.td Message-ID: <200607190027.TAA11052@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86InstrInfo.td updated: 1.279 -> 1.280 X86InstrMMX.td updated: 1.12 -> 1.13 --- Log message: INC / DEC instructions have shorter code size than ADD32ri8, etc. --- Diffs of the changes: (+13 -7) X86InstrInfo.td | 16 ++++++++++++---- X86InstrMMX.td | 4 +--- 2 files changed, 13 insertions(+), 7 deletions(-) Index: llvm/lib/Target/X86/X86InstrInfo.td diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.279 llvm/lib/Target/X86/X86InstrInfo.td:1.280 --- llvm/lib/Target/X86/X86InstrInfo.td:1.279 Tue Jul 11 14:49:49 2006 +++ llvm/lib/Target/X86/X86InstrInfo.td Tue Jul 18 19:27:29 2006 @@ -314,18 +314,22 @@ class I o, Format f, dag ops, string asm, list pattern> : X86Inst { let Pattern = pattern; + let CodeSize = 3; } class Ii8 o, Format f, dag ops, string asm, list pattern> : X86Inst { let Pattern = pattern; + let CodeSize = 3; } class Ii16 o, Format f, dag ops, string asm, list pattern> : X86Inst { let Pattern = pattern; + let CodeSize = 3; } class Ii32 o, Format f, dag ops, string asm, list pattern> : X86Inst { let Pattern = pattern; + let CodeSize = 3; } //===----------------------------------------------------------------------===// @@ -1060,6 +1064,7 @@ // unary instructions +let CodeSize = 2 in { def NEG8r : I<0xF6, MRM3r, (ops GR8 :$dst, GR8 :$src), "neg{b} $dst", [(set GR8:$dst, (ineg GR8:$src))]>; def NEG16r : I<0xF7, MRM3r, (ops GR16:$dst, GR16:$src), "neg{w} $dst", @@ -1090,17 +1095,19 @@ def NOT32m : I<0xF7, MRM2m, (ops i32mem:$dst), "not{l} $dst", [(store (not (loadi32 addr:$dst)), addr:$dst)]>; } +} // CodeSize // TODO: inc/dec is slow for P4, but fast for Pentium-M. +let CodeSize = 2 in def INC8r : I<0xFE, MRM0r, (ops GR8 :$dst, GR8 :$src), "inc{b} $dst", [(set GR8:$dst, (add GR8:$src, 1))]>; -let isConvertibleToThreeAddress = 1 in { // Can transform into LEA. +let isConvertibleToThreeAddress = 1, CodeSize = 1 in { // Can xform into LEA. def INC16r : I<0x40, AddRegFrm, (ops GR16:$dst, GR16:$src), "inc{w} $dst", [(set GR16:$dst, (add GR16:$src, 1))]>, OpSize; def INC32r : I<0x40, AddRegFrm, (ops GR32:$dst, GR32:$src), "inc{l} $dst", [(set GR32:$dst, (add GR32:$src, 1))]>; } -let isTwoAddress = 0 in { +let isTwoAddress = 0, CodeSize = 2 in { def INC8m : I<0xFE, MRM0m, (ops i8mem :$dst), "inc{b} $dst", [(store (add (loadi8 addr:$dst), 1), addr:$dst)]>; def INC16m : I<0xFF, MRM0m, (ops i16mem:$dst), "inc{w} $dst", @@ -1109,16 +1116,17 @@ [(store (add (loadi32 addr:$dst), 1), addr:$dst)]>; } +let CodeSize = 2 in def DEC8r : I<0xFE, MRM1r, (ops GR8 :$dst, GR8 :$src), "dec{b} $dst", [(set GR8:$dst, (add GR8:$src, -1))]>; -let isConvertibleToThreeAddress = 1 in { // Can transform into LEA. +let isConvertibleToThreeAddress = 1, CodeSize = 1 in { // Can xform into LEA. def DEC16r : I<0x48, AddRegFrm, (ops GR16:$dst, GR16:$src), "dec{w} $dst", [(set GR16:$dst, (add GR16:$src, -1))]>, OpSize; def DEC32r : I<0x48, AddRegFrm, (ops GR32:$dst, GR32:$src), "dec{l} $dst", [(set GR32:$dst, (add GR32:$src, -1))]>; } -let isTwoAddress = 0 in { +let isTwoAddress = 0, CodeSize = 2 in { def DEC8m : I<0xFE, MRM1m, (ops i8mem :$dst), "dec{b} $dst", [(store (add (loadi8 addr:$dst), -1), addr:$dst)]>; def DEC16m : I<0xFF, MRM1m, (ops i16mem:$dst), "dec{w} $dst", Index: llvm/lib/Target/X86/X86InstrMMX.td diff -u llvm/lib/Target/X86/X86InstrMMX.td:1.12 llvm/lib/Target/X86/X86InstrMMX.td:1.13 --- llvm/lib/Target/X86/X86InstrMMX.td:1.12 Tue May 16 02:21:53 2006 +++ llvm/lib/Target/X86/X86InstrMMX.td Tue Jul 18 19:27:29 2006 @@ -22,9 +22,7 @@ class MMX2I o, Format F, dag ops, string asm, list pattern> : I, TB, OpSize, Requires<[HasSSE2]>; class MMXIi8 o, Format F, dag ops, string asm, list pattern> - : X86Inst, TB, Requires<[HasMMX]> { - let Pattern = pattern; -} + : Ii8, TB, Requires<[HasMMX]>; // Some 'special' instructions def IMPLICIT_DEF_VR64 : I<0, Pseudo, (ops VR64:$dst), From lattner at cs.uiuc.edu Tue Jul 18 19:40:59 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 19:40:59 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/ValueTypes.h Message-ID: <200607190040.TAA13265@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: ValueTypes.h updated: 1.28 -> 1.29 --- Log message: Move MVT::getVectorType out of line, it is large and shouldn't be inlined. --- Diffs of the changes: (+2 -30) ValueTypes.h | 32 ++------------------------------ 1 files changed, 2 insertions(+), 30 deletions(-) Index: llvm/include/llvm/CodeGen/ValueTypes.h diff -u llvm/include/llvm/CodeGen/ValueTypes.h:1.28 llvm/include/llvm/CodeGen/ValueTypes.h:1.29 --- llvm/include/llvm/CodeGen/ValueTypes.h:1.28 Wed May 24 14:21:13 2006 +++ llvm/include/llvm/CodeGen/ValueTypes.h Tue Jul 18 19:40:45 2006 @@ -120,36 +120,8 @@ /// NumElements in length, where each element is of type VT. If there is no /// ValueType that represents this vector, a ValueType of Other is returned. /// - static inline ValueType getVectorType(ValueType VT, unsigned NumElements) { - switch (VT) { - default: - break; - case MVT::i8: - if (NumElements == 8) return MVT::v8i8; - if (NumElements == 16) return MVT::v16i8; - break; - case MVT::i16: - if (NumElements == 4) return MVT::v4i16; - if (NumElements == 8) return MVT::v8i16; - break; - case MVT::i32: - if (NumElements == 2) return MVT::v2i32; - if (NumElements == 4) return MVT::v4i32; - break; - case MVT::i64: - if (NumElements == 2) return MVT::v2i64; - break; - case MVT::f32: - if (NumElements == 2) return MVT::v2f32; - if (NumElements == 4) return MVT::v4f32; - break; - case MVT::f64: - if (NumElements == 2) return MVT::v2f64; - break; - } - return MVT::Other; - } - + ValueType getVectorType(ValueType VT, unsigned NumElements); + /// MVT::getVectorBaseType - Given a packed vector type, return the type of /// each element. static inline ValueType getVectorBaseType(ValueType VT) { From lattner at cs.uiuc.edu Tue Jul 18 19:40:59 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 19:40:59 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/ValueTypes.cpp Message-ID: <200607190040.TAA13261@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: ValueTypes.cpp updated: 1.7 -> 1.8 --- Log message: Move MVT::getVectorType out of line, it is large and shouldn't be inlined. --- Diffs of the changes: (+34 -0) ValueTypes.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 files changed, 34 insertions(+) Index: llvm/lib/CodeGen/ValueTypes.cpp diff -u llvm/lib/CodeGen/ValueTypes.cpp:1.7 llvm/lib/CodeGen/ValueTypes.cpp:1.8 --- llvm/lib/CodeGen/ValueTypes.cpp:1.7 Mon Feb 20 16:34:53 2006 +++ llvm/lib/CodeGen/ValueTypes.cpp Tue Jul 18 19:40:45 2006 @@ -46,6 +46,40 @@ } } +/// MVT::getVectorType - Returns the ValueType that represents a vector +/// NumElements in length, where each element is of type VT. If there is no +/// ValueType that represents this vector, a ValueType of Other is returned. +/// +MVT::ValueType MVT::getVectorType(ValueType VT, unsigned NumElements) { + switch (VT) { + default: + break; + case MVT::i8: + if (NumElements == 8) return MVT::v8i8; + if (NumElements == 16) return MVT::v16i8; + break; + case MVT::i16: + if (NumElements == 4) return MVT::v4i16; + if (NumElements == 8) return MVT::v8i16; + break; + case MVT::i32: + if (NumElements == 2) return MVT::v2i32; + if (NumElements == 4) return MVT::v4i32; + break; + case MVT::i64: + if (NumElements == 2) return MVT::v2i64; + break; + case MVT::f32: + if (NumElements == 2) return MVT::v2f32; + if (NumElements == 4) return MVT::v4f32; + break; + case MVT::f64: + if (NumElements == 2) return MVT::v2f64; + break; + } + return MVT::Other; +} + /// MVT::getTypeForValueType - This method returns an LLVM type corresponding /// to the specified ValueType. For integer types, this returns an unsigned /// type. Note that this will abort for types that cannot be represented. From lattner at cs.uiuc.edu Tue Jul 18 20:39:19 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue, 18 Jul 2006 20:39:19 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/AsmWriterEmitter.cpp Message-ID: <200607190139.UAA16041@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: AsmWriterEmitter.cpp updated: 1.39 -> 1.40 --- Log message: Fix a bug handling instructions, like blr, which just consist of a text string. The return value of printInstruction should be true for these. --- Diffs of the changes: (+11 -5) AsmWriterEmitter.cpp | 16 +++++++++++----- 1 files changed, 11 insertions(+), 5 deletions(-) Index: llvm/utils/TableGen/AsmWriterEmitter.cpp diff -u llvm/utils/TableGen/AsmWriterEmitter.cpp:1.39 llvm/utils/TableGen/AsmWriterEmitter.cpp:1.40 --- llvm/utils/TableGen/AsmWriterEmitter.cpp:1.39 Tue Jul 18 14:27:30 2006 +++ llvm/utils/TableGen/AsmWriterEmitter.cpp Tue Jul 18 20:39:06 2006 @@ -478,7 +478,7 @@ // Build an aggregate string, and build a table of offsets into it. std::map StringOffset; std::string AggregateString; - AggregateString += '\0'; + AggregateString += "\0\0"; /// OpcodeInfo - Theis encodes the index of the string to use for the first /// chunk of the output as well as indices used for operand printing. @@ -488,9 +488,14 @@ for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { AsmWriterInst *AWI = CGIAWIMap[NumberedInstructions[i]]; unsigned Idx; - if (AWI == 0 || AWI->Operands[0].Str.empty()) { + if (AWI == 0) { // Something not handled by the asmwriter printer. Idx = 0; + } else if (AWI->Operands[0].OperandType != + AsmWriterOperand::isLiteralTextOperand || + AWI->Operands[0].Str.empty()) { + // Something handled by the asmwriter printer, but with no leading string. + Idx = 1; } else { unsigned &Entry = StringOffset[AWI->Operands[0].Str]; if (Entry == 0) { @@ -522,10 +527,10 @@ while (1) { std::vector UniqueOperandCommands; - // For the first operand check, add a default value that unhandled - // instructions will use. + // For the first operand check, add a default value for instructions with + // just opcode strings to use. if (isFirst) { - UniqueOperandCommands.push_back(" return false;\n"); + UniqueOperandCommands.push_back(" return true;\n"); isFirst = false; } @@ -618,6 +623,7 @@ O << " // Emit the opcode for the instruction.\n" << " unsigned Bits = OpInfo[MI->getOpcode()];\n" + << " if (Bits == 0) return false;\n" << " O << AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << ");\n\n"; // Output the table driven operand information. From resistor at mac.com Tue Jul 18 22:52:00 2006 From: resistor at mac.com (Owen Anderson) Date: Tue, 18 Jul 2006 22:52:00 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LoopUnswitch.cpp Message-ID: <200607190352.WAA16905@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LoopUnswitch.cpp updated: 1.44 -> 1.45 --- Log message: Fix a error that hadn't yet cause any problems, but I'm sure it would have somewhere down the road. --- Diffs of the changes: (+1 -1) LoopUnswitch.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Transforms/Scalar/LoopUnswitch.cpp diff -u llvm/lib/Transforms/Scalar/LoopUnswitch.cpp:1.44 llvm/lib/Transforms/Scalar/LoopUnswitch.cpp:1.45 --- llvm/lib/Transforms/Scalar/LoopUnswitch.cpp:1.44 Wed Jun 28 12:47:50 2006 +++ llvm/lib/Transforms/Scalar/LoopUnswitch.cpp Tue Jul 18 22:51:48 2006 @@ -610,7 +610,7 @@ InsertedPHIs.insert(NewLCSSA); } - Instruction* InsertPt = EndBlock->begin(); + BasicBlock::iterator InsertPt = EndBlock->begin(); while (dyn_cast(InsertPt)) ++InsertPt; for (BasicBlock::iterator I = MiddleBlock->begin(); (OldLCSSA = dyn_cast(I)) && InsertedPHIs.count(OldLCSSA) == 0; From resistor at mac.com Wed Jul 19 00:45:37 2006 From: resistor at mac.com (Owen Anderson) Date: Wed, 19 Jul 2006 00:45:37 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LoopUnroll.cpp Message-ID: <200607190545.AAA17669@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LoopUnroll.cpp updated: 1.20 -> 1.21 --- Log message: Make LoopUnroll not die on LCSSA Phis. This makes lencod work again. --- Diffs of the changes: (+6 -0) LoopUnroll.cpp | 6 ++++++ 1 files changed, 6 insertions(+) Index: llvm/lib/Transforms/Scalar/LoopUnroll.cpp diff -u llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.20 llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.21 --- llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.20 Wed Jun 7 16:24:10 2006 +++ llvm/lib/Transforms/Scalar/LoopUnroll.cpp Wed Jul 19 00:45:14 2006 @@ -269,6 +269,12 @@ // FIXME: Should update dominator analyses + // Remove LCSSA Phis from the exit block + for (BasicBlock::iterator ExitInstr = LoopExit->begin(); + PHINode* PN = dyn_cast(ExitInstr); ++ExitInstr) { + PN->replaceAllUsesWith(PN->getOperand(0)); + PN->eraseFromParent(); + } // Now that everything is up-to-date that will be, we fold the loop block into // the preheader and exit block, updating our analyses as we go. From resistor at mac.com Wed Jul 19 00:48:57 2006 From: resistor at mac.com (Owen Anderson) Date: Wed, 19 Jul 2006 00:48:57 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LoopUnroll.cpp Message-ID: <200607190548.AAA17695@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LoopUnroll.cpp updated: 1.21 -> 1.22 --- Log message: Add an assertion. --- Diffs of the changes: (+2 -0) LoopUnroll.cpp | 2 ++ 1 files changed, 2 insertions(+) Index: llvm/lib/Transforms/Scalar/LoopUnroll.cpp diff -u llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.21 llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.22 --- llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.21 Wed Jul 19 00:45:14 2006 +++ llvm/lib/Transforms/Scalar/LoopUnroll.cpp Wed Jul 19 00:48:45 2006 @@ -272,6 +272,8 @@ // Remove LCSSA Phis from the exit block for (BasicBlock::iterator ExitInstr = LoopExit->begin(); PHINode* PN = dyn_cast(ExitInstr); ++ExitInstr) { + assert(PN->getNumIncomingValues() == 1 + && "Block should only have one pred, so Phi's must be LCSSA"); PN->replaceAllUsesWith(PN->getOperand(0)); PN->eraseFromParent(); } From evan.cheng at apple.com Wed Jul 19 00:58:30 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 19 Jul 2006 00:58:30 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/MRegisterInfo.h Message-ID: <200607190558.AAA17806@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: MRegisterInfo.h updated: 1.77 -> 1.78 --- Log message: Make sub- and super- register classes const. --- Diffs of the changes: (+3 -3) MRegisterInfo.h | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/include/llvm/Target/MRegisterInfo.h diff -u llvm/include/llvm/Target/MRegisterInfo.h:1.77 llvm/include/llvm/Target/MRegisterInfo.h:1.78 --- llvm/include/llvm/Target/MRegisterInfo.h:1.77 Thu May 11 02:31:44 2006 +++ llvm/include/llvm/Target/MRegisterInfo.h Wed Jul 19 00:58:18 2006 @@ -47,7 +47,7 @@ typedef const unsigned* const_iterator; typedef const MVT::ValueType* vt_iterator; - typedef const TargetRegisterClass** sc_iterator; + typedef const TargetRegisterClass* const * sc_iterator; private: bool isSubClass; const vt_iterator VTs; @@ -57,8 +57,8 @@ const iterator RegsBegin, RegsEnd; public: TargetRegisterClass(const MVT::ValueType *vts, - const TargetRegisterClass **subcs, - const TargetRegisterClass **supcs, + const TargetRegisterClass * const *subcs, + const TargetRegisterClass * const *supcs, unsigned RS, unsigned Al, iterator RB, iterator RE) : VTs(vts), SubClasses(subcs), SuperClasses(supcs), RegSize(RS), Alignment(Al), RegsBegin(RB), RegsEnd(RE) {} From evan.cheng at apple.com Wed Jul 19 00:58:31 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 19 Jul 2006 00:58:31 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/RegisterInfoEmitter.cpp Message-ID: <200607190558.AAA17810@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: RegisterInfoEmitter.cpp updated: 1.46 -> 1.47 --- Log message: Make sub- and super- register classes const. --- Diffs of the changes: (+5 -4) RegisterInfoEmitter.cpp | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) Index: llvm/utils/TableGen/RegisterInfoEmitter.cpp diff -u llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.46 llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.47 --- llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.46 Tue Jul 18 17:18:31 2006 +++ llvm/utils/TableGen/RegisterInfoEmitter.cpp Wed Jul 19 00:58:18 2006 @@ -149,8 +149,9 @@ // Emit the register list now. OS << " // " << Name - << " Register Class Value Types...\n const MVT::ValueType " << Name - << "[] = {\n "; + << " Register Class Value Types...\n" + << " static const MVT::ValueType " << Name + << "[] = {\n "; for (unsigned i = 0, e = RC.VTs.size(); i != e; ++i) OS << RC.VTs[i] << ", "; OS << "MVT::Other\n };\n\n"; @@ -182,7 +183,7 @@ OS << " // " << Name << " Register Class sub-classes...\n" - << " static const TargetRegisterClass* " + << " static const TargetRegisterClass* const " << Name << "Subclasses [] = {\n "; bool Empty = true; @@ -217,7 +218,7 @@ OS << " // " << Name << " Register Class super-classes...\n" - << " static const TargetRegisterClass* " + << " static const TargetRegisterClass* const " << Name << "Superclasses [] = {\n "; bool Empty = true; From evan.cheng at apple.com Wed Jul 19 01:03:17 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 19 Jul 2006 01:03:17 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/Benchmarks/Makefile Message-ID: <200607190603.BAA17921@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/Benchmarks: Makefile updated: 1.6 -> 1.7 --- Log message: Workaround to make JIT work with C++ programs on Mac OS X. __cxa_atexit is resolved by linker. --- Diffs of the changes: (+3 -1) Makefile | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) Index: llvm-test/SingleSource/Benchmarks/Makefile diff -u llvm-test/SingleSource/Benchmarks/Makefile:1.6 llvm-test/SingleSource/Benchmarks/Makefile:1.7 --- llvm-test/SingleSource/Benchmarks/Makefile:1.6 Sat Mar 4 17:15:33 2006 +++ llvm-test/SingleSource/Benchmarks/Makefile Wed Jul 19 01:03:03 2006 @@ -1,6 +1,8 @@ LEVEL = ../.. +#PARALLEL_DIRS=Dhrystone CoyoteBench Shootout Shootout-C++ Stanford McGill \ +# Misc Misc-C++ Misc-C++-EH PARALLEL_DIRS=Dhrystone CoyoteBench Shootout Shootout-C++ Stanford McGill \ - Misc Misc-C++ Misc-C++-EH + Misc Misc-C++ LDFLAGS += -lm include $(LEVEL)/SingleSource/Makefile.singlesrc From evan.cheng at apple.com Wed Jul 19 01:03:17 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 19 Jul 2006 01:03:17 -0500 Subject: [llvm-commits] CVS: llvm-test/Makefile.rules Message-ID: <200607190603.BAA17916@zion.cs.uiuc.edu> Changes in directory llvm-test: Makefile.rules updated: 1.13 -> 1.14 --- Log message: Workaround to make JIT work with C++ programs on Mac OS X. __cxa_atexit is resolved by linker. --- Diffs of the changes: (+1 -1) Makefile.rules | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-test/Makefile.rules diff -u llvm-test/Makefile.rules:1.13 llvm-test/Makefile.rules:1.14 --- llvm-test/Makefile.rules:1.13 Tue Jun 20 13:47:47 2006 +++ llvm-test/Makefile.rules Wed Jul 19 01:03:03 2006 @@ -318,7 +318,7 @@ CompileOptimizeOpts := -O3 -DNDEBUG -finline-functions ifeq ($(OS),Darwin) -TARGET_FLAGS := -mdynamic-no-pic -fomit-frame-pointer +TARGET_FLAGS := -mdynamic-no-pic -fomit-frame-pointer -fno-use-cxa-atexit endif ifdef EXTRA_OPTIONS From evan.cheng at apple.com Wed Jul 19 01:06:37 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 19 Jul 2006 01:06:37 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/README.txt Message-ID: <200607190606.BAA17962@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: README.txt updated: 1.118 -> 1.119 --- Log message: Misc. new entry. --- Diffs of the changes: (+5 -0) README.txt | 5 +++++ 1 files changed, 5 insertions(+) Index: llvm/lib/Target/X86/README.txt diff -u llvm/lib/Target/X86/README.txt:1.118 llvm/lib/Target/X86/README.txt:1.119 --- llvm/lib/Target/X86/README.txt:1.118 Fri Jun 16 19:45:49 2006 +++ llvm/lib/Target/X86/README.txt Wed Jul 19 01:06:24 2006 @@ -704,3 +704,8 @@ //===---------------------------------------------------------------------===// Use cpuid to auto-detect CPU features such as SSE, SSE2, and SSE3. + +//===---------------------------------------------------------------------===// + +JIT should resolve __cxa_atexit on Mac OS X. In a non-jit environment, the +symbol is a dynamically resolved by the linker. From evan.cheng at apple.com Wed Jul 19 02:28:28 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 19 Jul 2006 02:28:28 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/Benchmarks/Makefile Message-ID: <200607190728.CAA26342@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/Benchmarks: Makefile updated: 1.7 -> 1.8 --- Log message: Undo. Wasn't meant to be checked in. --- Diffs of the changes: (+2 -2) Makefile | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm-test/SingleSource/Benchmarks/Makefile diff -u llvm-test/SingleSource/Benchmarks/Makefile:1.7 llvm-test/SingleSource/Benchmarks/Makefile:1.8 --- llvm-test/SingleSource/Benchmarks/Makefile:1.7 Wed Jul 19 01:03:03 2006 +++ llvm-test/SingleSource/Benchmarks/Makefile Wed Jul 19 02:28:16 2006 @@ -1,6 +1,6 @@ LEVEL = ../.. -#PARALLEL_DIRS=Dhrystone CoyoteBench Shootout Shootout-C++ Stanford McGill \ -# Misc Misc-C++ Misc-C++-EH +PARALLEL_DIRS=Dhrystone CoyoteBench Shootout Shootout-C++ Stanford McGill \ + Misc Misc-C++ Misc-C++-EH PARALLEL_DIRS=Dhrystone CoyoteBench Shootout Shootout-C++ Stanford McGill \ Misc Misc-C++ LDFLAGS += -lm From jlaskey at apple.com Wed Jul 19 06:55:16 2006 From: jlaskey at apple.com (Jim Laskey) Date: Wed, 19 Jul 2006 06:55:16 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ATTAsmPrinter.cpp Message-ID: <200607191155.GAA31012@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ATTAsmPrinter.cpp updated: 1.52 -> 1.53 --- Log message: Bug#834 ICE (crash in code generator?) when building PCH . Missing Darwin check in Intel ATT ASM printer. --- Diffs of the changes: (+5 -3) X86ATTAsmPrinter.cpp | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) Index: llvm/lib/Target/X86/X86ATTAsmPrinter.cpp diff -u llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.52 llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.53 --- llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.52 Fri Jun 23 07:51:53 2006 +++ llvm/lib/Target/X86/X86ATTAsmPrinter.cpp Wed Jul 19 06:54:50 2006 @@ -26,9 +26,11 @@ /// method to print assembly for each instruction. /// bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) { - // Let PassManager know we need debug information and relay - // the MachineDebugInfo address on to DwarfWriter. - DW.SetDebugInfo(&getAnalysis()); + if (Subtarget->TargetType == X86Subtarget::isDarwin) { + // Let PassManager know we need debug information and relay + // the MachineDebugInfo address on to DwarfWriter. + DW.SetDebugInfo(&getAnalysis()); + } SetupMachineFunction(MF); O << "\n\n"; From pjenkins at apple.com Wed Jul 19 11:13:42 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Wed, 19 Jul 2006 11:13:42 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/fulltest.php Message-ID: <200607191613.LAA32721@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: fulltest.php updated: 1.3 -> 1.4 --- Log message: Rearranged tables of program tests at the bottom of the page so that the order is now: external tests, multisource tests, singlesource tests. --- Diffs of the changes: (+15 -16) fulltest.php | 31 +++++++++++++++---------------- 1 files changed, 15 insertions(+), 16 deletions(-) Index: nightlytest-serverside/fulltest.php diff -u nightlytest-serverside/fulltest.php:1.3 nightlytest-serverside/fulltest.php:1.4 --- nightlytest-serverside/fulltest.php:1.3 Fri Jul 7 19:32:18 2006 +++ nightlytest-serverside/fulltest.php Wed Jul 19 11:13:30 2006 @@ -543,12 +543,11 @@ print "\n"; print "

\n"; #ending black border around table +/********************** Multisource table **********************/ -/********************** Singlesource table **********************/ - -print"Singlesource tests:
\n"; +print"Multisource tests:
\n"; print "
\n"; #creating the black border around the table -print "\n"; +print "
\n"; print "\t\n"; print "\t\t\n"; $index=0; //here to ensure we dont print %diff for GCC comparisons @@ -572,9 +571,9 @@ } print "\t\t\n"; $index++; } @@ -582,7 +581,7 @@ $row_color=1; $count=0; foreach(array_keys($today_results) as $program){ - if(strcmp($today_results["$program"][0],"singlesource")==0){ + if(strcmp($today_results["$program"][0],"multisource")==0){ if($row_color % 2 == 0){ $def_color="white"; } @@ -610,12 +609,15 @@ print "
Program\n"; print "\n"; - print "\n"; + print "\n"; print "
{$category_print_array_description[$index]}
\n"; - print "
?
\n"; + print "
?\n"; print "
\n"; print "


\n"; #ending black border around table +print " | "; +print "\n"; +print "\n"; -/********************** Multisource table **********************/ +/********************** Singlesource table **********************/ -print"Multisource tests:
\n"; +print"Singlesource tests:
\n"; print "
\n"; #creating the black border around the table -print "\n"; +print "
\n"; print "\t\n"; print "\t\t\n"; $index=0; //here to ensure we dont print %diff for GCC comparisons @@ -639,9 +641,9 @@ } print "\t\t\n"; $index++; } @@ -649,7 +651,7 @@ $row_color=1; $count=0; foreach(array_keys($today_results) as $program){ - if(strcmp($today_results["$program"][0],"multisource")==0){ + if(strcmp($today_results["$program"][0],"singlesource")==0){ if($row_color % 2 == 0){ $def_color="white"; } @@ -677,9 +679,6 @@ print "
Program\n"; print "\n"; - print "\n"; + print "\n"; print "
{$category_print_array_description[$index]}
\n"; - print "
?
\n"; + print "
?\n"; print "
\n"; print "


\n"; #ending black border around table -print " | "; -print "\n"; -print "\n"; mysql_close($mysql_link); From jlaskey at apple.com Wed Jul 19 11:37:27 2006 From: jlaskey at apple.com (Jim Laskey) Date: Wed, 19 Jul 2006 11:37:27 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/X86/2006-07-19-ATTAsm.ll Message-ID: <200607191637.LAA00450@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/X86: 2006-07-19-ATTAsm.ll added (r1.1) --- Log message: Regression test for PR834: http://llvm.org/PR834 . --- Diffs of the changes: (+51 -0) 2006-07-19-ATTAsm.ll | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 51 insertions(+) Index: llvm/test/Regression/CodeGen/X86/2006-07-19-ATTAsm.ll diff -c /dev/null llvm/test/Regression/CodeGen/X86/2006-07-19-ATTAsm.ll:1.1 *** /dev/null Wed Jul 19 11:37:25 2006 --- llvm/test/Regression/CodeGen/X86/2006-07-19-ATTAsm.ll Wed Jul 19 11:37:15 2006 *************** *** 0 **** --- 1,51 ---- + ; RUN: llvm-as < %s | llc -march=x86 -x86-asm-syntax=att + ; PR834 + + target endian = little + target pointersize = 32 + target triple = "i386-unknown-freebsd6.1" + + %llvm.dbg.anchor.type = type { uint, uint } + %llvm.dbg.basictype.type = type { uint, { }*, sbyte*, { }*, uint, ulong, ulong, ulong, uint, uint } + %llvm.dbg.compile_unit.type = type { uint, { }*, uint, sbyte*, sbyte*, sbyte* } + %llvm.dbg.global_variable.type = type { uint, { }*, { }*, sbyte*, sbyte*, { }*, uint, { }*, bool, bool, { }* } + %x = global int 0 ; [#uses=1] + %llvm.dbg.global_variable = internal constant %llvm.dbg.global_variable.type { + uint 327732, + { }* cast (%llvm.dbg.anchor.type* %llvm.dbg.global_variables to { }*), + { }* cast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*), + sbyte* getelementptr ([2 x sbyte]* %str, int 0, int 0), + sbyte* null, + { }* cast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*), + uint 1, + { }* cast (%llvm.dbg.basictype.type* %llvm.dbg.basictype to { }*), + bool false, + bool true, + { }* cast (int* %x to { }*) }, section "llvm.metadata" ; <%llvm.dbg.global_variable.type*> [#uses=0] + %llvm.dbg.global_variables = linkonce constant %llvm.dbg.anchor.type { uint 327680, uint 52 }, section "llvm.metadata" ; <%llvm.dbg.anchor.type*> [#uses=1] + %llvm.dbg.compile_unit = internal constant %llvm.dbg.compile_unit.type { + uint 327697, + { }* cast (%llvm.dbg.anchor.type* %llvm.dbg.compile_units to { }*), + uint 4, + sbyte* getelementptr ([10 x sbyte]* %str, int 0, int 0), + sbyte* getelementptr ([32 x sbyte]* %str, int 0, int 0), + sbyte* getelementptr ([45 x sbyte]* %str, int 0, int 0) }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + %llvm.dbg.compile_units = linkonce constant %llvm.dbg.anchor.type { uint 327680, uint 17 }, section "llvm.metadata" ; <%llvm.dbg.anchor.type*> [#uses=1] + %str = internal constant [10 x sbyte] c"testb.cpp\00", section "llvm.metadata" ; <[10 x sbyte]*> [#uses=1] + %str = internal constant [32 x sbyte] c"/Sources/Projects/DwarfTesting/\00", section "llvm.metadata" ; <[32 x sbyte]*> [#uses=1] + %str = internal constant [45 x sbyte] c"4.0.1 LLVM (Apple Computer, Inc. build 5400)\00", section "llvm.metadata" ; <[45 x sbyte]*> [#uses=1] + %str = internal constant [2 x sbyte] c"x\00", section "llvm.metadata" ; <[2 x sbyte]*> [#uses=1] + %llvm.dbg.basictype = internal constant %llvm.dbg.basictype.type { + uint 327716, + { }* cast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*), + sbyte* getelementptr ([4 x sbyte]* %str, int 0, int 0), + { }* null, + uint 0, + ulong 32, + ulong 32, + ulong 0, + uint 0, + uint 5 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1] + %str = internal constant [4 x sbyte] c"int\00", section "llvm.metadata" ; <[4 x sbyte]*> [#uses=1] + + implementation ; Functions: From lattner at cs.uiuc.edu Wed Jul 19 12:14:35 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 19 Jul 2006 12:14:35 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/PowerPC/2006-07-19-stwbrx-crash.ll Message-ID: <200607191714.MAA00867@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/PowerPC: 2006-07-19-stwbrx-crash.ll added (r1.1) --- Log message: new testcase --- Diffs of the changes: (+10 -0) 2006-07-19-stwbrx-crash.ll | 10 ++++++++++ 1 files changed, 10 insertions(+) Index: llvm/test/Regression/CodeGen/PowerPC/2006-07-19-stwbrx-crash.ll diff -c /dev/null llvm/test/Regression/CodeGen/PowerPC/2006-07-19-stwbrx-crash.ll:1.1 *** /dev/null Wed Jul 19 12:14:33 2006 --- llvm/test/Regression/CodeGen/PowerPC/2006-07-19-stwbrx-crash.ll Wed Jul 19 12:14:23 2006 *************** *** 0 **** --- 1,10 ---- + ; RUN: llvm-as < %s | llc -march=ppc32 + + void %img2buf(int %symbol_size_in_bytes, ushort* %ui16) { + %tmp93 = load ushort* null ; [#uses=1] + %tmp99 = call ushort %llvm.bswap.i16( ushort %tmp93 ) ; [#uses=1] + store ushort %tmp99, ushort* %ui16 + ret void + } + + declare ushort %llvm.bswap.i16(ushort) From lattner at cs.uiuc.edu Wed Jul 19 12:15:48 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 19 Jul 2006 12:15:48 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCInstrInfo.td Message-ID: <200607191715.MAA00938@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPCInstrInfo.td updated: 1.239 -> 1.240 --- Log message: bswapped load/store instructions are only availble in indexed addressing form. As such, use xoaddr (indexed only), not xaddr for address selection. This fixes CodeGen/PowerPC/2006-07-19-stwbrx-crash.ll, a crash compiling lencod. --- Diffs of the changes: (+4 -4) PPCInstrInfo.td | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.239 llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.240 --- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.239 Tue Jul 18 11:33:26 2006 +++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Wed Jul 19 12:15:36 2006 @@ -478,10 +478,10 @@ def LHBRX : XForm_1<31, 790, (ops GPRC:$rD, memrr:$src), "lhbrx $rD, $src", LdStGeneral, - [(set GPRC:$rD, (PPClbrx xaddr:$src,srcvalue:$dummy, i16))]>; + [(set GPRC:$rD, (PPClbrx xoaddr:$src, srcvalue:$sv, i16))]>; def LWBRX : XForm_1<31, 534, (ops GPRC:$rD, memrr:$src), "lwbrx $rD, $src", LdStGeneral, - [(set GPRC:$rD, (PPClbrx xaddr:$src,srcvalue:$dummy, i32))]>; + [(set GPRC:$rD, (PPClbrx xoaddr:$src, srcvalue:$sv, i32))]>; } @@ -538,11 +538,11 @@ []>; def STHBRX: XForm_8<31, 918, (ops GPRC:$rS, memrr:$dst), "sthbrx $rS, $dst", LdStGeneral, - [(PPCstbrx GPRC:$rS, xaddr:$dst, srcvalue:$dummy, i16)]>, + [(PPCstbrx GPRC:$rS, xoaddr:$dst, srcvalue:$dummy, i16)]>, PPC970_DGroup_Cracked; def STWBRX: XForm_8<31, 662, (ops GPRC:$rS, memrr:$dst), "stwbrx $rS, $dst", LdStGeneral, - [(PPCstbrx GPRC:$rS, xaddr:$dst, srcvalue:$dummy, i32)]>, + [(PPCstbrx GPRC:$rS, xoaddr:$dst, srcvalue:$dummy, i32)]>, PPC970_DGroup_Cracked; } let PPC970_Unit = 1 in { // FXU Operations. From lattner at cs.uiuc.edu Wed Jul 19 12:51:17 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 19 Jul 2006 12:51:17 -0500 Subject: [llvm-commits] CVS: llvm-www/robots.txt Message-ID: <200607191751.MAA01324@zion.cs.uiuc.edu> Changes in directory llvm-www: robots.txt updated: 1.3 -> 1.4 --- Log message: Don't spider the nightly tester stuff. --- Diffs of the changes: (+1 -0) robots.txt | 1 + 1 files changed, 1 insertion(+) Index: llvm-www/robots.txt diff -u llvm-www/robots.txt:1.3 llvm-www/robots.txt:1.4 --- llvm-www/robots.txt:1.3 Wed May 18 17:55:06 2005 +++ llvm-www/robots.txt Wed Jul 19 12:51:05 2006 @@ -4,3 +4,4 @@ Disallow: /cvsweb Disallow: /stats Disallow: /testresults/X86 +Disallow: /nightlytest From lattner at cs.uiuc.edu Wed Jul 19 12:51:45 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 19 Jul 2006 12:51:45 -0500 Subject: [llvm-commits] CVS: llvm-www/header.incl Message-ID: <200607191751.MAA01357@zion.cs.uiuc.edu> Changes in directory llvm-www: header.incl updated: 1.46 -> 1.47 --- Log message: Point to the new nightly tester. --- Diffs of the changes: (+1 -1) header.incl | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-www/header.incl diff -u llvm-www/header.incl:1.46 llvm-www/header.incl:1.47 --- llvm-www/header.incl:1.46 Thu Apr 20 02:21:41 2006 +++ llvm-www/header.incl Wed Jul 19 12:51:33 2006 @@ -107,7 +107,7 @@ Dev. Resources:
doxygen cvsweb
- Nightly Tester
+ Nightly Tester
LLVM Bugzilla From lattner at cs.uiuc.edu Wed Jul 19 12:52:43 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 19 Jul 2006 12:52:43 -0500 Subject: [llvm-commits] CVS: llvm-www/OldNews.html Message-ID: <200607191752.MAA01414@zion.cs.uiuc.edu> Changes in directory llvm-www: OldNews.html updated: 1.3 -> 1.4 --- Log message: Wow this is old news :) --- Diffs of the changes: (+1 -1) OldNews.html | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-www/OldNews.html diff -u llvm-www/OldNews.html:1.3 llvm-www/OldNews.html:1.4 --- llvm-www/OldNews.html:1.3 Sat Jul 16 00:43:39 2005 +++ llvm-www/OldNews.html Wed Jul 19 12:52:31 2006 @@ -36,7 +36,7 @@ Jan 22, 2003 - Implemented a new - automated nightly testing + automated nightly testing framework. From pjenkins at apple.com Wed Jul 19 12:53:04 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Wed, 19 Jul 2006 12:53:04 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607191753.MAA01428@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.15 -> 1.16 --- Log message: Removed the portion that determines which tests are newly passing/failing because we no longer keep the previos days list on the testing machines. Added functionality to send lists of all tests, all passing tests, all failing tests all unexpected failing tests. --- Diffs of the changes: (+99 -78) NewNightlyTest.pl | 177 ++++++++++++++++++++++++++++++------------------------ 1 files changed, 99 insertions(+), 78 deletions(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.15 llvm/utils/NewNightlyTest.pl:1.16 --- llvm/utils/NewNightlyTest.pl:1.15 Tue Jul 18 16:21:53 2006 +++ llvm/utils/NewNightlyTest.pl Wed Jul 19 12:52:51 2006 @@ -798,7 +798,6 @@ " | sort > $Prefix-Tests.txt"; } WriteFile "$Prefix-externalprogramstable.txt", $ExternalProgramsTable; - } ############################################################## @@ -808,50 +807,69 @@ # # ############################################################## -my ($TestsAdded, $TestsRemoved, $TestsFixed, $TestsBroken) = ("","","",""); +$dejagnu = ReadFile $DejagnuSum; + at DEJAGNU = split "\n", $dejagnu; -if ($TestError) { - $TestsAdded = "error testing
"; - $TestsRemoved = "error testing
"; - $TestsFixed = "error testing
"; - $TestsBroken = "error testing
"; -} else { - my ($RTestsAdded, $RTestsRemoved) = DiffFiles "-Tests.txt"; - - my @RawTestsAddedArray = split '\n', $RTestsAdded; - my @RawTestsRemovedArray = split '\n', $RTestsRemoved; - - my %OldTests = map {GetRegex('TEST-....: (.+)', $_)=>$_} - @RawTestsRemovedArray; - my %NewTests = map {GetRegex('TEST-....: (.+)', $_)=>$_} - @RawTestsAddedArray; - - foreach $Test (keys %NewTests) { - if (!exists $OldTests{$Test}) { # TestAdded if in New but not old - $TestsAdded = "$TestsAdded$Test\n"; - } else { - if ($OldTests{$Test} =~ /TEST-PASS/) { # Was the old one a pass? - $TestsBroken = "$TestsBroken$Test\n"; # New one must be a failure - } else { - $TestsFixed = "$TestsFixed$Test\n"; # No, new one is a pass. - } +my $passes="", +my $fails=""; +my $xfails=""; + +for($x=0; $x<@DEJAGNU; $x++){ + if($DEJAGNU[$x] =~ m/^PASS:/){ + $passes.="$x\n"; + } + elsif($DEJAGNU[$x] =~ m/^FAIL:/){ + $fails.="$x\n"; + } + elsif($DEJAGNU[$x] =~ m/^XFAIL:/){ + $xfails.="$x\n"; } - } - foreach $Test (keys %OldTests) { # TestRemoved if in Old but not New - $TestsRemoved = "$TestsRemoved$Test\n" if (!exists $NewTests{$Test}); - } - - #print "\nTESTS ADDED: \n\n$TestsAdded\n\n" if (length $TestsAdded); - #print "\nTESTS REMOVED:\n\n$TestsRemoved\n\n" if (length $TestsRemoved); - #print "\nTESTS FIXED: \n\n$TestsFixed\n\n" if (length $TestsFixed); - #print "\nTESTS BROKEN: \n\n$TestsBroken\n\n" if (length $TestsBroken); - - #$TestsAdded = AddPreTag $TestsAdded; - #$TestsRemoved = AddPreTag $TestsRemoved; - #$TestsFixed = AddPreTag $TestsFixed; - #$TestsBroken = AddPreTag $TestsBroken; } +# my ($TestsAdded, $TestsRemoved, $TestsFixed, $TestsBroken) = ("","","",""); +# +# if ($TestError) { +# $TestsAdded = "error testing
"; +# $TestsRemoved = "error testing
"; +# $TestsFixed = "error testing
"; +# $TestsBroken = "error testing
"; +# } else { +# my ($RTestsAdded, $RTestsRemoved) = DiffFiles "-Tests.txt"; +# +# my @RawTestsAddedArray = split '\n', $RTestsAdded; +# my @RawTestsRemovedArray = split '\n', $RTestsRemoved; +# +# my %OldTests = map {GetRegex('TEST-....: (.+)', $_)=>$_} +# @RawTestsRemovedArray; +# my %NewTests = map {GetRegex('TEST-....: (.+)', $_)=>$_} +# @RawTestsAddedArray; +# +# foreach $Test (keys %NewTests) { +# if (!exists $OldTests{$Test}) { # TestAdded if in New but not old +# $TestsAdded = "$TestsAdded$Test\n"; +# } else { +# if ($OldTests{$Test} =~ /TEST-PASS/) { # Was the old one a pass? +# $TestsBroken = "$TestsBroken$Test\n"; # New one must be a failure +# } else { +# $TestsFixed = "$TestsFixed$Test\n"; # No, new one is a pass. +# } +# } +# } +# foreach $Test (keys %OldTests) { # TestRemoved if in Old but not New +# $TestsRemoved = "$TestsRemoved$Test\n" if (!exists $NewTests{$Test}); +# } +# +# #print "\nTESTS ADDED: \n\n$TestsAdded\n\n" if (length $TestsAdded); +# #print "\nTESTS REMOVED:\n\n$TestsRemoved\n\n" if (length $TestsRemoved); +# #print "\nTESTS FIXED: \n\n$TestsFixed\n\n" if (length $TestsFixed); +# #print "\nTESTS BROKEN: \n\n$TestsBroken\n\n" if (length $TestsBroken); +# +# #$TestsAdded = AddPreTag $TestsAdded; +# #$TestsRemoved = AddPreTag $TestsRemoved; +# #$TestsFixed = AddPreTag $TestsFixed; +# #$TestsBroken = AddPreTag $TestsBroken; +# } + ############################################################## # # If we built the tree successfully, runs of the Olden suite with @@ -961,7 +979,7 @@ @DEJAGNULOG_FULL = ReadFile "$DejagnuTestsLog"; $dejagnulog_full = join("\n", @DEJAGNULOG_FULL); -my $gcc_version_long=""; +newmy $gcc_version_long=""; if($GCCPATH ne ""){ $gcc_version_long = `$GCCPATH/gcc --version`; print "$GCCPATH/gcc --version\n"; @@ -973,6 +991,8 @@ @GCC_VERSION = split '\n', $gcc_version_long; my $gcc_version = $GCC_VERSION[0]; +$all_tests = ReadFile, "$Prefix-Tests.txt"; + ############################################################## # # Send data via a post request @@ -985,42 +1005,43 @@ my $host = "llvm.org"; my $file = "/nightlytest/NightlyTestAccept.cgi"; my %hash_of_data = ('machine_data' => $machine_data, - 'build_data' => $build_data, - 'gcc_version' => $gcc_version, - 'nickname' => $nickname, - 'dejagnutime_wall' => $DejagnuWallTime, - 'dejagnutime_cpu' => $DejagnuTime, - 'cvscheckouttime_wall' => $CVSCheckoutTime_Wall, - 'cvscheckouttime_cpu' => $CVSCheckoutTime_CPU, - 'configtime_wall' => $ConfigWallTime, - 'configtime_cpu'=> $ConfigTime, - 'buildtime_wall' => $BuildWallTime, - 'buildtime_cpu' => $BuildTime, - 'warnings' => $WarningsFile, - 'cvsusercommitlist' => $UserCommitList, - 'cvsuserupdatelist' => $UserUpdateList, - 'cvsaddedfiles' => $CVSAddedFiles, - 'cvsmodifiedfiles' => $CVSModifiedFiles, - 'cvsremovedfiles' => $CVSRemovedFiles, - 'lines_of_code' => $LOC, - 'cvs_file_count' => $NumFilesInCVS, - 'cvs_dir_count' => $NumDirsInCVS, - 'buildstatus' => $BuildStatus, - 'singlesource_programstable' => $SingleSourceProgramsTable, - 'multisource_programstable' => $MultiSourceProgramsTable, - 'externalsource_programstable' => $ExternalProgramsTable, - 'llcbeta_options' => $multisource_llcbeta_options, - 'warnings_removed' => $WarningsRemoved, - 'warnings_added' => $WarningsAdded, - 'newly_passing_tests' => $TestsFixed, - 'newly_failing_tests' => $TestsBroken, - 'new_tests' => $TestsAdded, - 'removed_tests' => $TestsRemoved, - 'unexpfail_tests' => $unexpfail_tests, - 'dejagnutests_log' => $dejagnutests_log, - 'dejagnutests_sum' => $dejagnutests_sum, - 'starttime' => $starttime, - 'endtime' => $endtime); + 'build_data' => $build_data, + 'gcc_version' => $gcc_version, + 'nickname' => $nickname, + 'dejagnutime_wall' => $DejagnuWallTime, + 'dejagnutime_cpu' => $DejagnuTime, + 'cvscheckouttime_wall' => $CVSCheckoutTime_Wall, + 'cvscheckouttime_cpu' => $CVSCheckoutTime_CPU, + 'configtime_wall' => $ConfigWallTime, + 'configtime_cpu'=> $ConfigTime, + 'buildtime_wall' => $BuildWallTime, + 'buildtime_cpu' => $BuildTime, + 'warnings' => $WarningsFile, + 'cvsusercommitlist' => $UserCommitList, + 'cvsuserupdatelist' => $UserUpdateList, + 'cvsaddedfiles' => $CVSAddedFiles, + 'cvsmodifiedfiles' => $CVSModifiedFiles, + 'cvsremovedfiles' => $CVSRemovedFiles, + 'lines_of_code' => $LOC, + 'cvs_file_count' => $NumFilesInCVS, + 'cvs_dir_count' => $NumDirsInCVS, + 'buildstatus' => $BuildStatus, + 'singlesource_programstable' => $SingleSourceProgramsTable, + 'multisource_programstable' => $MultiSourceProgramsTable, + 'externalsource_programstable' => $ExternalProgramsTable, + 'llcbeta_options' => $multisource_llcbeta_options, + 'warnings_removed' => $WarningsRemoved, + 'warnings_added' => $WarningsAdded, + 'passing_tests' => $passes, + 'expfail_tests' => $xfails, + 'unexpfail_tests' => $fails, + 'all_tests' => $all_tests, + 'new_tests' => "", + 'removed_tests' => "", + 'dejagnutests_log' => $dejagnutests_log, + 'dejagnutests_sum' => $dejagnutests_sum, + 'starttime' => $starttime, + 'endtime' => $endtime); $TESTING = 0; From lattner at cs.uiuc.edu Wed Jul 19 12:53:35 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 19 Jul 2006 12:53:35 -0500 Subject: [llvm-commits] CVS: llvm-www/OpenProjects.html Message-ID: <200607191753.MAA01462@zion.cs.uiuc.edu> Changes in directory llvm-www: OpenProjects.html updated: 1.15 -> 1.16 --- Log message: Point to the new nightly tester --- Diffs of the changes: (+2 -2) OpenProjects.html | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm-www/OpenProjects.html diff -u llvm-www/OpenProjects.html:1.15 llvm-www/OpenProjects.html:1.16 --- llvm-www/OpenProjects.html:1.15 Tue May 9 22:55:15 2006 +++ llvm-www/OpenProjects.html Wed Jul 19 12:53:23 2006 @@ -161,7 +161,7 @@

Find benchmarks either using our test results or on your own, +href="http://llvm.org/nightlytest/">test results or on your own, where LLVM code generators do not produce optimal code or simply where another compiler produces better code. Try to minimize the test case that demonstrates the issue. Then, either submit a @@ -374,7 +374,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"> LLVM Compiler Infrastructure
- Last modified: $Date: 2006/05/10 03:55:15 $ + Last modified: $Date: 2006/07/19 17:53:23 $ From jlaskey at apple.com Wed Jul 19 12:53:45 2006 From: jlaskey at apple.com (Jim Laskey) Date: Wed, 19 Jul 2006 12:53:45 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp Message-ID: <200607191753.MAA01469@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86RegisterInfo.cpp updated: 1.159 -> 1.160 --- Log message: Reduce size of routine. Shrinks .o by 37%. --- Diffs of the changes: (+489 -421) X86RegisterInfo.cpp | 910 +++++++++++++++++++++++++++------------------------- 1 files changed, 489 insertions(+), 421 deletions(-) Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.159 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.160 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.159 Wed Jun 28 19:36:51 2006 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Wed Jul 19 12:53:32 2006 @@ -194,441 +194,509 @@ } +//===----------------------------------------------------------------------===// +// Efficient Lookup Table Support +//===----------------------------------------------------------------------===// + +namespace { + struct TableEntry { + unsigned from; + unsigned to; + unsigned make; + bool operator<(const TableEntry &TE) const { return from < TE.from; } + friend bool operator<(const TableEntry &TE, unsigned V) { + return TE.from < V; + } + friend bool operator<(unsigned V, const TableEntry &TE) { + return V < TE.from; + } + }; +} + +static bool TableIsSorted(const TableEntry *Table, unsigned NumEntries) { + for (unsigned i = 0; i != NumEntries-1; ++i) + if (!(Table[i] < Table[i+1])) return false; + return true; +} + +static int Lookup(const TableEntry *Table, unsigned N, unsigned Opcode, + unsigned &make) { + const TableEntry *I = std::lower_bound(Table, Table+N, Opcode); + if (I != Table+N && I->from == Opcode) { + make = I->make; + return I->to; + } + return -1; +} + +#define ARRAY_SIZE(TABLE) \ + (sizeof(TABLE)/sizeof(TABLE[0])) + +#ifdef NDEBUG +#define ASSERT_SORTED(TABLE) +#else +#define ASSERT_SORTED(TABLE) \ + { static bool TABLE##Checked = false; \ + if (!TABLE##Checked) \ + assert(TableIsSorted(TABLE, ARRAY_SIZE(TABLE)) && \ + "All lookup tables must be sorted for efficient access!"); \ + } +#endif + + MachineInstr* X86RegisterInfo::foldMemoryOperand(MachineInstr* MI, unsigned i, int FrameIndex) const { + // Check switch flag if (NoFusing) return NULL; - /// FIXME: This should obviously be autogenerated by tablegen when patterns - /// are available! - if (i == 0) { - switch(MI->getOpcode()) { - case X86::XCHG8rr: return MakeMRInst(X86::XCHG8mr ,FrameIndex, MI); - case X86::XCHG16rr: return MakeMRInst(X86::XCHG16mr,FrameIndex, MI); - case X86::XCHG32rr: return MakeMRInst(X86::XCHG32mr,FrameIndex, MI); - case X86::MOV8rr: return MakeMRInst(X86::MOV8mr , FrameIndex, MI); - case X86::MOV16rr: return MakeMRInst(X86::MOV16mr, FrameIndex, MI); - case X86::MOV32rr: return MakeMRInst(X86::MOV32mr, FrameIndex, MI); - case X86::MOV8ri: return MakeMIInst(X86::MOV8mi , FrameIndex, MI); - case X86::MOV16ri: return MakeMIInst(X86::MOV16mi, FrameIndex, MI); - case X86::MOV32ri: return MakeMIInst(X86::MOV32mi, FrameIndex, MI); - case X86::MUL8r: return MakeMInst( X86::MUL8m , FrameIndex, MI); - case X86::MUL16r: return MakeMInst( X86::MUL16m, FrameIndex, MI); - case X86::MUL32r: return MakeMInst( X86::MUL32m, FrameIndex, MI); - case X86::IMUL8r: return MakeMInst( X86::IMUL8m , FrameIndex, MI); - case X86::IMUL16r: return MakeMInst( X86::IMUL16m, FrameIndex, MI); - case X86::IMUL32r: return MakeMInst( X86::IMUL32m, FrameIndex, MI); - case X86::DIV8r: return MakeMInst( X86::DIV8m , FrameIndex, MI); - case X86::DIV16r: return MakeMInst( X86::DIV16m, FrameIndex, MI); - case X86::DIV32r: return MakeMInst( X86::DIV32m, FrameIndex, MI); - case X86::IDIV8r: return MakeMInst( X86::IDIV8m , FrameIndex, MI); - case X86::IDIV16r: return MakeMInst( X86::IDIV16m, FrameIndex, MI); - case X86::IDIV32r: return MakeMInst( X86::IDIV32m, FrameIndex, MI); - case X86::NEG8r: return MakeMInst( X86::NEG8m , FrameIndex, MI); - case X86::NEG16r: return MakeMInst( X86::NEG16m, FrameIndex, MI); - case X86::NEG32r: return MakeMInst( X86::NEG32m, FrameIndex, MI); - case X86::NOT8r: return MakeMInst( X86::NOT8m , FrameIndex, MI); - case X86::NOT16r: return MakeMInst( X86::NOT16m, FrameIndex, MI); - case X86::NOT32r: return MakeMInst( X86::NOT32m, FrameIndex, MI); - case X86::INC8r: return MakeMInst( X86::INC8m , FrameIndex, MI); - case X86::INC16r: return MakeMInst( X86::INC16m, FrameIndex, MI); - case X86::INC32r: return MakeMInst( X86::INC32m, FrameIndex, MI); - case X86::DEC8r: return MakeMInst( X86::DEC8m , FrameIndex, MI); - case X86::DEC16r: return MakeMInst( X86::DEC16m, FrameIndex, MI); - case X86::DEC32r: return MakeMInst( X86::DEC32m, FrameIndex, MI); - case X86::ADD8rr: return MakeMRInst(X86::ADD8mr , FrameIndex, MI); - case X86::ADD16rr: return MakeMRInst(X86::ADD16mr, FrameIndex, MI); - case X86::ADD32rr: return MakeMRInst(X86::ADD32mr, FrameIndex, MI); - case X86::ADD8ri: return MakeMIInst(X86::ADD8mi , FrameIndex, MI); - case X86::ADD16ri: return MakeMIInst(X86::ADD16mi, FrameIndex, MI); - case X86::ADD32ri: return MakeMIInst(X86::ADD32mi, FrameIndex, MI); - case X86::ADD16ri8: return MakeMIInst(X86::ADD16mi8,FrameIndex, MI); - case X86::ADD32ri8: return MakeMIInst(X86::ADD32mi8,FrameIndex, MI); - case X86::ADC32rr: return MakeMRInst(X86::ADC32mr, FrameIndex, MI); - case X86::ADC32ri: return MakeMIInst(X86::ADC32mi, FrameIndex, MI); - case X86::ADC32ri8: return MakeMIInst(X86::ADC32mi8,FrameIndex, MI); - case X86::SUB8rr: return MakeMRInst(X86::SUB8mr , FrameIndex, MI); - case X86::SUB16rr: return MakeMRInst(X86::SUB16mr, FrameIndex, MI); - case X86::SUB32rr: return MakeMRInst(X86::SUB32mr, FrameIndex, MI); - case X86::SUB8ri: return MakeMIInst(X86::SUB8mi , FrameIndex, MI); - case X86::SUB16ri: return MakeMIInst(X86::SUB16mi, FrameIndex, MI); - case X86::SUB32ri: return MakeMIInst(X86::SUB32mi, FrameIndex, MI); - case X86::SUB16ri8: return MakeMIInst(X86::SUB16mi8,FrameIndex, MI); - case X86::SUB32ri8: return MakeMIInst(X86::SUB32mi8,FrameIndex, MI); - case X86::SBB32rr: return MakeMRInst(X86::SBB32mr, FrameIndex, MI); - case X86::SBB32ri: return MakeMIInst(X86::SBB32mi, FrameIndex, MI); - case X86::SBB32ri8: return MakeMIInst(X86::SBB32mi8,FrameIndex, MI); - case X86::AND8rr: return MakeMRInst(X86::AND8mr , FrameIndex, MI); - case X86::AND16rr: return MakeMRInst(X86::AND16mr, FrameIndex, MI); - case X86::AND32rr: return MakeMRInst(X86::AND32mr, FrameIndex, MI); - case X86::AND8ri: return MakeMIInst(X86::AND8mi , FrameIndex, MI); - case X86::AND16ri: return MakeMIInst(X86::AND16mi, FrameIndex, MI); - case X86::AND32ri: return MakeMIInst(X86::AND32mi, FrameIndex, MI); - case X86::AND16ri8: return MakeMIInst(X86::AND16mi8,FrameIndex, MI); - case X86::AND32ri8: return MakeMIInst(X86::AND32mi8,FrameIndex, MI); - case X86::OR8rr: return MakeMRInst(X86::OR8mr , FrameIndex, MI); - case X86::OR16rr: return MakeMRInst(X86::OR16mr, FrameIndex, MI); - case X86::OR32rr: return MakeMRInst(X86::OR32mr, FrameIndex, MI); - case X86::OR8ri: return MakeMIInst(X86::OR8mi , FrameIndex, MI); - case X86::OR16ri: return MakeMIInst(X86::OR16mi, FrameIndex, MI); - case X86::OR32ri: return MakeMIInst(X86::OR32mi, FrameIndex, MI); - case X86::OR16ri8: return MakeMIInst(X86::OR16mi8, FrameIndex, MI); - case X86::OR32ri8: return MakeMIInst(X86::OR32mi8, FrameIndex, MI); - case X86::XOR8rr: return MakeMRInst(X86::XOR8mr , FrameIndex, MI); - case X86::XOR16rr: return MakeMRInst(X86::XOR16mr, FrameIndex, MI); - case X86::XOR32rr: return MakeMRInst(X86::XOR32mr, FrameIndex, MI); - case X86::XOR8ri: return MakeMIInst(X86::XOR8mi , FrameIndex, MI); - case X86::XOR16ri: return MakeMIInst(X86::XOR16mi, FrameIndex, MI); - case X86::XOR32ri: return MakeMIInst(X86::XOR32mi, FrameIndex, MI); - case X86::XOR16ri8: return MakeMIInst(X86::XOR16mi8,FrameIndex, MI); - case X86::XOR32ri8: return MakeMIInst(X86::XOR32mi8,FrameIndex, MI); - case X86::SHL8rCL: return MakeMInst( X86::SHL8mCL ,FrameIndex, MI); - case X86::SHL16rCL: return MakeMInst( X86::SHL16mCL,FrameIndex, MI); - case X86::SHL32rCL: return MakeMInst( X86::SHL32mCL,FrameIndex, MI); - case X86::SHL8ri: return MakeMIInst(X86::SHL8mi , FrameIndex, MI); - case X86::SHL16ri: return MakeMIInst(X86::SHL16mi, FrameIndex, MI); - case X86::SHL32ri: return MakeMIInst(X86::SHL32mi, FrameIndex, MI); - case X86::SHL8r1: return MakeMInst(X86::SHL8m1 , FrameIndex, MI); - case X86::SHL16r1: return MakeMInst(X86::SHL16m1, FrameIndex, MI); - case X86::SHL32r1: return MakeMInst(X86::SHL32m1, FrameIndex, MI); - case X86::SHR8rCL: return MakeMInst( X86::SHR8mCL ,FrameIndex, MI); - case X86::SHR16rCL: return MakeMInst( X86::SHR16mCL,FrameIndex, MI); - case X86::SHR32rCL: return MakeMInst( X86::SHR32mCL,FrameIndex, MI); - case X86::SHR8ri: return MakeMIInst(X86::SHR8mi , FrameIndex, MI); - case X86::SHR16ri: return MakeMIInst(X86::SHR16mi, FrameIndex, MI); - case X86::SHR32ri: return MakeMIInst(X86::SHR32mi, FrameIndex, MI); - case X86::SHR8r1: return MakeMInst(X86::SHR8m1 , FrameIndex, MI); - case X86::SHR16r1: return MakeMInst(X86::SHR16m1, FrameIndex, MI); - case X86::SHR32r1: return MakeMInst(X86::SHR32m1, FrameIndex, MI); - case X86::SAR8rCL: return MakeMInst( X86::SAR8mCL ,FrameIndex, MI); - case X86::SAR16rCL: return MakeMInst( X86::SAR16mCL,FrameIndex, MI); - case X86::SAR32rCL: return MakeMInst( X86::SAR32mCL,FrameIndex, MI); - case X86::SAR8ri: return MakeMIInst(X86::SAR8mi , FrameIndex, MI); - case X86::SAR16ri: return MakeMIInst(X86::SAR16mi, FrameIndex, MI); - case X86::SAR32ri: return MakeMIInst(X86::SAR32mi, FrameIndex, MI); - case X86::SAR8r1: return MakeMInst(X86::SAR8m1 , FrameIndex, MI); - case X86::SAR16r1: return MakeMInst(X86::SAR16m1, FrameIndex, MI); - case X86::SAR32r1: return MakeMInst(X86::SAR32m1, FrameIndex, MI); - case X86::ROL8rCL: return MakeMInst( X86::ROL8mCL ,FrameIndex, MI); - case X86::ROL16rCL: return MakeMInst( X86::ROL16mCL,FrameIndex, MI); - case X86::ROL32rCL: return MakeMInst( X86::ROL32mCL,FrameIndex, MI); - case X86::ROL8ri: return MakeMIInst(X86::ROL8mi , FrameIndex, MI); - case X86::ROL16ri: return MakeMIInst(X86::ROL16mi, FrameIndex, MI); - case X86::ROL32ri: return MakeMIInst(X86::ROL32mi, FrameIndex, MI); - case X86::ROL8r1: return MakeMInst(X86::ROL8m1 , FrameIndex, MI); - case X86::ROL16r1: return MakeMInst(X86::ROL16m1, FrameIndex, MI); - case X86::ROL32r1: return MakeMInst(X86::ROL32m1, FrameIndex, MI); - case X86::ROR8rCL: return MakeMInst( X86::ROR8mCL ,FrameIndex, MI); - case X86::ROR16rCL: return MakeMInst( X86::ROR16mCL,FrameIndex, MI); - case X86::ROR32rCL: return MakeMInst( X86::ROR32mCL,FrameIndex, MI); - case X86::ROR8ri: return MakeMIInst(X86::ROR8mi , FrameIndex, MI); - case X86::ROR16ri: return MakeMIInst(X86::ROR16mi, FrameIndex, MI); - case X86::ROR32ri: return MakeMIInst(X86::ROR32mi, FrameIndex, MI); - case X86::ROR8r1: return MakeMInst(X86::ROR8m1 , FrameIndex, MI); - case X86::ROR16r1: return MakeMInst(X86::ROR16m1, FrameIndex, MI); - case X86::ROR32r1: return MakeMInst(X86::ROR32m1, FrameIndex, MI); - case X86::SHLD32rrCL:return MakeMRInst( X86::SHLD32mrCL,FrameIndex, MI); - case X86::SHLD32rri8:return MakeMRIInst(X86::SHLD32mri8,FrameIndex, MI); - case X86::SHRD32rrCL:return MakeMRInst( X86::SHRD32mrCL,FrameIndex, MI); - case X86::SHRD32rri8:return MakeMRIInst(X86::SHRD32mri8,FrameIndex, MI); - case X86::SHLD16rrCL:return MakeMRInst( X86::SHLD16mrCL,FrameIndex, MI); - case X86::SHLD16rri8:return MakeMRIInst(X86::SHLD16mri8,FrameIndex, MI); - case X86::SHRD16rrCL:return MakeMRInst( X86::SHRD16mrCL,FrameIndex, MI); - case X86::SHRD16rri8:return MakeMRIInst(X86::SHRD16mri8,FrameIndex, MI); - case X86::SETBr: return MakeMInst( X86::SETBm, FrameIndex, MI); - case X86::SETAEr: return MakeMInst( X86::SETAEm, FrameIndex, MI); - case X86::SETEr: return MakeMInst( X86::SETEm, FrameIndex, MI); - case X86::SETNEr: return MakeMInst( X86::SETNEm, FrameIndex, MI); - case X86::SETBEr: return MakeMInst( X86::SETBEm, FrameIndex, MI); - case X86::SETAr: return MakeMInst( X86::SETAm, FrameIndex, MI); - case X86::SETSr: return MakeMInst( X86::SETSm, FrameIndex, MI); - case X86::SETNSr: return MakeMInst( X86::SETNSm, FrameIndex, MI); - case X86::SETPr: return MakeMInst( X86::SETPm, FrameIndex, MI); - case X86::SETNPr: return MakeMInst( X86::SETNPm, FrameIndex, MI); - case X86::SETLr: return MakeMInst( X86::SETLm, FrameIndex, MI); - case X86::SETGEr: return MakeMInst( X86::SETGEm, FrameIndex, MI); - case X86::SETLEr: return MakeMInst( X86::SETLEm, FrameIndex, MI); - case X86::SETGr: return MakeMInst( X86::SETGm, FrameIndex, MI); - // Alias instructions - case X86::MOV8r0: return MakeM0Inst(X86::MOV8mi, FrameIndex, MI); - case X86::MOV16r0: return MakeM0Inst(X86::MOV16mi, FrameIndex, MI); - case X86::MOV32r0: return MakeM0Inst(X86::MOV32mi, FrameIndex, MI); - // Alias scalar SSE instructions - case X86::FsMOVAPSrr: return MakeMRInst(X86::MOVSSmr, FrameIndex, MI); - case X86::FsMOVAPDrr: return MakeMRInst(X86::MOVSDmr, FrameIndex, MI); - // Scalar SSE instructions - case X86::MOVSSrr: return MakeMRInst(X86::MOVSSmr, FrameIndex, MI); - case X86::MOVSDrr: return MakeMRInst(X86::MOVSDmr, FrameIndex, MI); - // Packed SSE instructions - case X86::MOVAPSrr: return MakeMRInst(X86::MOVAPSmr, FrameIndex, MI); - case X86::MOVAPDrr: return MakeMRInst(X86::MOVAPDmr, FrameIndex, MI); - case X86::MOVUPSrr: return MakeMRInst(X86::MOVUPSmr, FrameIndex, MI); - case X86::MOVUPDrr: return MakeMRInst(X86::MOVUPDmr, FrameIndex, MI); - // Alias packed SSE instructions - case X86::MOVPS2SSrr:return MakeMRInst(X86::MOVPS2SSmr, FrameIndex, MI); - case X86::MOVPDI2DIrr:return MakeMRInst(X86::MOVPDI2DImr, FrameIndex, MI); - } + // Selection of instruction makes + enum { + makeM0Inst, + makeMIInst, + makeMInst, + makeMRIInst, + makeMRInst, + makeRMIInst, + makeRMInst + }; + + // Table (and size) to search + const TableEntry *OpcodeTablePtr = NULL; + unsigned OpcodeTableSize = 0; + + if (i == 0) { // If operand 0 + static const TableEntry OpcodeTable[] = { + { X86::ADC32ri, X86::ADC32mi, makeMIInst }, + { X86::ADC32ri8, X86::ADC32mi8, makeMIInst }, + { X86::ADC32rr, X86::ADC32mr, makeMRInst }, + { X86::ADD16ri, X86::ADD16mi, makeMIInst }, + { X86::ADD16ri8, X86::ADD16mi8, makeMIInst }, + { X86::ADD16rr, X86::ADD16mr, makeMRInst }, + { X86::ADD32ri, X86::ADD32mi, makeMIInst }, + { X86::ADD32ri8, X86::ADD32mi8, makeMIInst }, + { X86::ADD32rr, X86::ADD32mr, makeMRInst }, + { X86::ADD8ri, X86::ADD8mi, makeMIInst }, + { X86::ADD8rr, X86::ADD8mr, makeMRInst }, + { X86::AND16ri, X86::AND16mi, makeMIInst }, + { X86::AND16ri8, X86::AND16mi8, makeMIInst }, + { X86::AND16rr, X86::AND16mr, makeMRInst }, + { X86::AND32ri, X86::AND32mi, makeMIInst }, + { X86::AND32ri8, X86::AND32mi8, makeMIInst }, + { X86::AND32rr, X86::AND32mr, makeMRInst }, + { X86::AND8ri, X86::AND8mi, makeMIInst }, + { X86::AND8rr, X86::AND8mr, makeMRInst }, + { X86::DEC16r, X86::DEC16m, makeMInst }, + { X86::DEC32r, X86::DEC32m, makeMInst }, + { X86::DEC8r, X86::DEC8m, makeMInst }, + { X86::DIV16r, X86::DIV16m, makeMInst }, + { X86::DIV32r, X86::DIV32m, makeMInst }, + { X86::DIV8r, X86::DIV8m, makeMInst }, + { X86::FsMOVAPDrr, X86::MOVSDmr, makeMRInst }, + { X86::FsMOVAPSrr, X86::MOVSSmr, makeMRInst }, + { X86::IDIV16r, X86::IDIV16m, makeMInst }, + { X86::IDIV32r, X86::IDIV32m, makeMInst }, + { X86::IDIV8r, X86::IDIV8m, makeMInst }, + { X86::IMUL16r, X86::IMUL16m, makeMInst }, + { X86::IMUL32r, X86::IMUL32m, makeMInst }, + { X86::IMUL8r, X86::IMUL8m, makeMInst }, + { X86::INC16r, X86::INC16m, makeMInst }, + { X86::INC32r, X86::INC32m, makeMInst }, + { X86::INC8r, X86::INC8m, makeMInst }, + { X86::MOV16r0, X86::MOV16mi, makeM0Inst }, + { X86::MOV16ri, X86::MOV16mi, makeMIInst }, + { X86::MOV16rr, X86::MOV16mr, makeMRInst }, + { X86::MOV32r0, X86::MOV32mi, makeM0Inst }, + { X86::MOV32ri, X86::MOV32mi, makeMIInst }, + { X86::MOV32rr, X86::MOV32mr, makeMRInst }, + { X86::MOV8r0, X86::MOV8mi, makeM0Inst }, + { X86::MOV8ri, X86::MOV8mi, makeMIInst }, + { X86::MOV8rr, X86::MOV8mr, makeMRInst }, + { X86::MOVAPDrr, X86::MOVAPDmr, makeMRInst }, + { X86::MOVAPSrr, X86::MOVAPSmr, makeMRInst }, + { X86::MOVPDI2DIrr, X86::MOVPDI2DImr, makeMRInst }, + { X86::MOVPS2SSrr, X86::MOVPS2SSmr, makeMRInst }, + { X86::MOVSDrr, X86::MOVSDmr, makeMRInst }, + { X86::MOVSSrr, X86::MOVSSmr, makeMRInst }, + { X86::MOVUPDrr, X86::MOVUPDmr, makeMRInst }, + { X86::MOVUPSrr, X86::MOVUPSmr, makeMRInst }, + { X86::MUL16r, X86::MUL16m, makeMInst }, + { X86::MUL32r, X86::MUL32m, makeMInst }, + { X86::MUL8r, X86::MUL8m, makeMInst }, + { X86::NEG16r, X86::NEG16m, makeMInst }, + { X86::NEG32r, X86::NEG32m, makeMInst }, + { X86::NEG8r, X86::NEG8m, makeMInst }, + { X86::NOT16r, X86::NOT16m, makeMInst }, + { X86::NOT32r, X86::NOT32m, makeMInst }, + { X86::NOT8r, X86::NOT8m, makeMInst }, + { X86::OR16ri, X86::OR16mi, makeMIInst }, + { X86::OR16ri8, X86::OR16mi8, makeMIInst }, + { X86::OR16rr, X86::OR16mr, makeMRInst }, + { X86::OR32ri, X86::OR32mi, makeMIInst }, + { X86::OR32ri8, X86::OR32mi8, makeMIInst }, + { X86::OR32rr, X86::OR32mr, makeMRInst }, + { X86::OR8ri, X86::OR8mi, makeMIInst }, + { X86::OR8rr, X86::OR8mr, makeMRInst }, + { X86::ROL16r1, X86::ROL16m1, makeMInst }, + { X86::ROL16rCL, X86::ROL16mCL, makeMInst }, + { X86::ROL16ri, X86::ROL16mi, makeMIInst }, + { X86::ROL32r1, X86::ROL32m1, makeMInst }, + { X86::ROL32rCL, X86::ROL32mCL, makeMInst }, + { X86::ROL32ri, X86::ROL32mi, makeMIInst }, + { X86::ROL8r1, X86::ROL8m1, makeMInst }, + { X86::ROL8rCL, X86::ROL8mCL, makeMInst }, + { X86::ROL8ri, X86::ROL8mi, makeMIInst }, + { X86::ROR16r1, X86::ROR16m1, makeMInst }, + { X86::ROR16rCL, X86::ROR16mCL, makeMInst }, + { X86::ROR16ri, X86::ROR16mi, makeMIInst }, + { X86::ROR32r1, X86::ROR32m1, makeMInst }, + { X86::ROR32rCL, X86::ROR32mCL, makeMInst }, + { X86::ROR32ri, X86::ROR32mi, makeMIInst }, + { X86::ROR8r1, X86::ROR8m1, makeMInst }, + { X86::ROR8rCL, X86::ROR8mCL, makeMInst }, + { X86::ROR8ri, X86::ROR8mi, makeMIInst }, + { X86::SAR16r1, X86::SAR16m1, makeMInst }, + { X86::SAR16rCL, X86::SAR16mCL, makeMInst }, + { X86::SAR16ri, X86::SAR16mi, makeMIInst }, + { X86::SAR32r1, X86::SAR32m1, makeMInst }, + { X86::SAR32rCL, X86::SAR32mCL, makeMInst }, + { X86::SAR32ri, X86::SAR32mi, makeMIInst }, + { X86::SAR8r1, X86::SAR8m1, makeMInst }, + { X86::SAR8rCL, X86::SAR8mCL, makeMInst }, + { X86::SAR8ri, X86::SAR8mi, makeMIInst }, + { X86::SBB32ri, X86::SBB32mi, makeMIInst }, + { X86::SBB32ri8, X86::SBB32mi8, makeMIInst }, + { X86::SBB32rr, X86::SBB32mr, makeMRInst }, + { X86::SETAEr, X86::SETAEm, makeMInst }, + { X86::SETAr, X86::SETAm, makeMInst }, + { X86::SETBEr, X86::SETBEm, makeMInst }, + { X86::SETBr, X86::SETBm, makeMInst }, + { X86::SETEr, X86::SETEm, makeMInst }, + { X86::SETGEr, X86::SETGEm, makeMInst }, + { X86::SETGr, X86::SETGm, makeMInst }, + { X86::SETLEr, X86::SETLEm, makeMInst }, + { X86::SETLr, X86::SETLm, makeMInst }, + { X86::SETNEr, X86::SETNEm, makeMInst }, + { X86::SETNPr, X86::SETNPm, makeMInst }, + { X86::SETNSr, X86::SETNSm, makeMInst }, + { X86::SETPr, X86::SETPm, makeMInst }, + { X86::SETSr, X86::SETSm, makeMInst }, + { X86::SHL16r1, X86::SHL16m1, makeMInst }, + { X86::SHL16rCL, X86::SHL16mCL, makeMInst }, + { X86::SHL16ri, X86::SHL16mi, makeMIInst }, + { X86::SHL32r1, X86::SHL32m1, makeMInst }, + { X86::SHL32rCL, X86::SHL32mCL, makeMInst }, + { X86::SHL32ri, X86::SHL32mi, makeMIInst }, + { X86::SHL8r1, X86::SHL8m1, makeMInst }, + { X86::SHL8rCL, X86::SHL8mCL, makeMInst }, + { X86::SHL8ri, X86::SHL8mi, makeMIInst }, + { X86::SHLD16rrCL, X86::SHLD16mrCL, makeMRInst }, + { X86::SHLD16rri8, X86::SHLD16mri8, makeMRIInst }, + { X86::SHLD32rrCL, X86::SHLD32mrCL, makeMRInst }, + { X86::SHLD32rri8, X86::SHLD32mri8, makeMRIInst }, + { X86::SHR16r1, X86::SHR16m1, makeMInst }, + { X86::SHR16rCL, X86::SHR16mCL, makeMInst }, + { X86::SHR16ri, X86::SHR16mi, makeMIInst }, + { X86::SHR32r1, X86::SHR32m1, makeMInst }, + { X86::SHR32rCL, X86::SHR32mCL, makeMInst }, + { X86::SHR32ri, X86::SHR32mi, makeMIInst }, + { X86::SHR8r1, X86::SHR8m1, makeMInst }, + { X86::SHR8rCL, X86::SHR8mCL, makeMInst }, + { X86::SHR8ri, X86::SHR8mi, makeMIInst }, + { X86::SHRD16rrCL, X86::SHRD16mrCL, makeMRInst }, + { X86::SHRD16rri8, X86::SHRD16mri8, makeMRIInst }, + { X86::SHRD32rrCL, X86::SHRD32mrCL, makeMRInst }, + { X86::SHRD32rri8, X86::SHRD32mri8, makeMRIInst }, + { X86::SUB16ri, X86::SUB16mi, makeMIInst }, + { X86::SUB16ri8, X86::SUB16mi8, makeMIInst }, + { X86::SUB16rr, X86::SUB16mr, makeMRInst }, + { X86::SUB32ri, X86::SUB32mi, makeMIInst }, + { X86::SUB32ri8, X86::SUB32mi8, makeMIInst }, + { X86::SUB32rr, X86::SUB32mr, makeMRInst }, + { X86::SUB8ri, X86::SUB8mi, makeMIInst }, + { X86::SUB8rr, X86::SUB8mr, makeMRInst }, + { X86::XCHG16rr, X86::XCHG16mr, makeMRInst }, + { X86::XCHG32rr, X86::XCHG32mr, makeMRInst }, + { X86::XCHG8rr, X86::XCHG8mr, makeMRInst }, + { X86::XOR16ri, X86::XOR16mi, makeMIInst }, + { X86::XOR16ri8, X86::XOR16mi8, makeMIInst }, + { X86::XOR16rr, X86::XOR16mr, makeMRInst }, + { X86::XOR32ri, X86::XOR32mi, makeMIInst }, + { X86::XOR32ri8, X86::XOR32mi8, makeMIInst }, + { X86::XOR32rr, X86::XOR32mr, makeMRInst }, + { X86::XOR8ri, X86::XOR8mi, makeMIInst }, + { X86::XOR8rr, X86::XOR8mr, makeMRInst } + }; + ASSERT_SORTED(OpcodeTable); + OpcodeTablePtr = OpcodeTable; + OpcodeTableSize = ARRAY_SIZE(OpcodeTable); } else if (i == 1) { - switch(MI->getOpcode()) { - case X86::XCHG8rr: return MakeRMInst(X86::XCHG8rm ,FrameIndex, MI); - case X86::XCHG16rr: return MakeRMInst(X86::XCHG16rm,FrameIndex, MI); - case X86::XCHG32rr: return MakeRMInst(X86::XCHG32rm,FrameIndex, MI); - case X86::MOV8rr: return MakeRMInst(X86::MOV8rm , FrameIndex, MI); - case X86::MOV16rr: return MakeRMInst(X86::MOV16rm, FrameIndex, MI); - case X86::MOV32rr: return MakeRMInst(X86::MOV32rm, FrameIndex, MI); - case X86::CMOVB16rr: return MakeRMInst(X86::CMOVB16rm , FrameIndex, MI); - case X86::CMOVB32rr: return MakeRMInst(X86::CMOVB32rm , FrameIndex, MI); - case X86::CMOVAE16rr: return MakeRMInst(X86::CMOVAE16rm , FrameIndex, MI); - case X86::CMOVAE32rr: return MakeRMInst(X86::CMOVAE32rm , FrameIndex, MI); - case X86::CMOVE16rr: return MakeRMInst(X86::CMOVE16rm , FrameIndex, MI); - case X86::CMOVE32rr: return MakeRMInst(X86::CMOVE32rm , FrameIndex, MI); - case X86::CMOVNE16rr:return MakeRMInst(X86::CMOVNE16rm, FrameIndex, MI); - case X86::CMOVNE32rr:return MakeRMInst(X86::CMOVNE32rm, FrameIndex, MI); - case X86::CMOVBE16rr:return MakeRMInst(X86::CMOVBE16rm, FrameIndex, MI); - case X86::CMOVBE32rr:return MakeRMInst(X86::CMOVBE32rm, FrameIndex, MI); - case X86::CMOVA16rr:return MakeRMInst(X86::CMOVA16rm, FrameIndex, MI); - case X86::CMOVA32rr:return MakeRMInst(X86::CMOVA32rm, FrameIndex, MI); - case X86::CMOVS16rr: return MakeRMInst(X86::CMOVS16rm , FrameIndex, MI); - case X86::CMOVS32rr: return MakeRMInst(X86::CMOVS32rm , FrameIndex, MI); - case X86::CMOVNS16rr: return MakeRMInst(X86::CMOVNS16rm , FrameIndex, MI); - case X86::CMOVNS32rr: return MakeRMInst(X86::CMOVNS32rm , FrameIndex, MI); - case X86::CMOVP16rr: return MakeRMInst(X86::CMOVP16rm , FrameIndex, MI); - case X86::CMOVP32rr: return MakeRMInst(X86::CMOVP32rm , FrameIndex, MI); - case X86::CMOVNP16rr: return MakeRMInst(X86::CMOVNP16rm , FrameIndex, MI); - case X86::CMOVNP32rr: return MakeRMInst(X86::CMOVNP32rm , FrameIndex, MI); - case X86::CMOVL16rr: return MakeRMInst(X86::CMOVL16rm , FrameIndex, MI); - case X86::CMOVL32rr: return MakeRMInst(X86::CMOVL32rm , FrameIndex, MI); - case X86::CMOVGE16rr: return MakeRMInst(X86::CMOVGE16rm , FrameIndex, MI); - case X86::CMOVGE32rr: return MakeRMInst(X86::CMOVGE32rm , FrameIndex, MI); - case X86::CMOVLE16rr: return MakeRMInst(X86::CMOVLE16rm , FrameIndex, MI); - case X86::CMOVLE32rr: return MakeRMInst(X86::CMOVLE32rm , FrameIndex, MI); - case X86::CMOVG16rr: return MakeRMInst(X86::CMOVG16rm , FrameIndex, MI); - case X86::CMOVG32rr: return MakeRMInst(X86::CMOVG32rm , FrameIndex, MI); - case X86::ADD8rr: return MakeRMInst(X86::ADD8rm , FrameIndex, MI); - case X86::ADD16rr: return MakeRMInst(X86::ADD16rm, FrameIndex, MI); - case X86::ADD32rr: return MakeRMInst(X86::ADD32rm, FrameIndex, MI); - case X86::ADC32rr: return MakeRMInst(X86::ADC32rm, FrameIndex, MI); - case X86::SUB8rr: return MakeRMInst(X86::SUB8rm , FrameIndex, MI); - case X86::SUB16rr: return MakeRMInst(X86::SUB16rm, FrameIndex, MI); - case X86::SUB32rr: return MakeRMInst(X86::SUB32rm, FrameIndex, MI); - case X86::SBB32rr: return MakeRMInst(X86::SBB32rm, FrameIndex, MI); - case X86::AND8rr: return MakeRMInst(X86::AND8rm , FrameIndex, MI); - case X86::AND16rr: return MakeRMInst(X86::AND16rm, FrameIndex, MI); - case X86::AND32rr: return MakeRMInst(X86::AND32rm, FrameIndex, MI); - case X86::OR8rr: return MakeRMInst(X86::OR8rm , FrameIndex, MI); - case X86::OR16rr: return MakeRMInst(X86::OR16rm, FrameIndex, MI); - case X86::OR32rr: return MakeRMInst(X86::OR32rm, FrameIndex, MI); - case X86::XOR8rr: return MakeRMInst(X86::XOR8rm , FrameIndex, MI); - case X86::XOR16rr: return MakeRMInst(X86::XOR16rm, FrameIndex, MI); - case X86::XOR32rr: return MakeRMInst(X86::XOR32rm, FrameIndex, MI); - case X86::IMUL16rr: return MakeRMInst(X86::IMUL16rm,FrameIndex, MI); - case X86::IMUL32rr: return MakeRMInst(X86::IMUL32rm,FrameIndex, MI); - case X86::IMUL16rri: return MakeRMIInst(X86::IMUL16rmi, FrameIndex, MI); - case X86::IMUL32rri: return MakeRMIInst(X86::IMUL32rmi, FrameIndex, MI); - case X86::IMUL16rri8:return MakeRMIInst(X86::IMUL16rmi8, FrameIndex, MI); - case X86::IMUL32rri8:return MakeRMIInst(X86::IMUL32rmi8, FrameIndex, MI); - case X86::TEST8rr: return MakeRMInst(X86::TEST8rm ,FrameIndex, MI); - case X86::TEST16rr: return MakeRMInst(X86::TEST16rm,FrameIndex, MI); - case X86::TEST32rr: return MakeRMInst(X86::TEST32rm,FrameIndex, MI); - case X86::TEST8ri: return MakeMIInst(X86::TEST8mi ,FrameIndex, MI); - case X86::TEST16ri: return MakeMIInst(X86::TEST16mi,FrameIndex, MI); - case X86::TEST32ri: return MakeMIInst(X86::TEST32mi,FrameIndex, MI); - case X86::CMP8rr: return MakeRMInst(X86::CMP8rm , FrameIndex, MI); - case X86::CMP16rr: return MakeRMInst(X86::CMP16rm, FrameIndex, MI); - case X86::CMP32rr: return MakeRMInst(X86::CMP32rm, FrameIndex, MI); - case X86::CMP8ri: return MakeRMInst(X86::CMP8mi , FrameIndex, MI); - case X86::CMP16ri: return MakeMIInst(X86::CMP16mi, FrameIndex, MI); - case X86::CMP32ri: return MakeMIInst(X86::CMP32mi, FrameIndex, MI); - case X86::CMP16ri8: return MakeMIInst(X86::CMP16mi8, FrameIndex, MI); - case X86::CMP32ri8: return MakeRMInst(X86::CMP32mi8, FrameIndex, MI); - case X86::MOVSX16rr8:return MakeRMInst(X86::MOVSX16rm8 , FrameIndex, MI); - case X86::MOVSX32rr8:return MakeRMInst(X86::MOVSX32rm8, FrameIndex, MI); - case X86::MOVSX32rr16:return MakeRMInst(X86::MOVSX32rm16, FrameIndex, MI); - case X86::MOVZX16rr8:return MakeRMInst(X86::MOVZX16rm8 , FrameIndex, MI); - case X86::MOVZX32rr8:return MakeRMInst(X86::MOVZX32rm8, FrameIndex, MI); - case X86::MOVZX32rr16:return MakeRMInst(X86::MOVZX32rm16, FrameIndex, MI); - // Alias scalar SSE instructions - case X86::FsMOVAPSrr:return MakeRMInst(X86::MOVSSrm, FrameIndex, MI); - case X86::FsMOVAPDrr:return MakeRMInst(X86::MOVSDrm, FrameIndex, MI); - // Scalar SSE instructions - case X86::MOVSSrr: return MakeRMInst(X86::MOVSSrm, FrameIndex, MI); - case X86::MOVSDrr: return MakeRMInst(X86::MOVSDrm, FrameIndex, MI); - case X86::Int_CVTSS2SIrr: - return MakeRMInst(X86::Int_CVTSS2SIrm, FrameIndex, MI); - case X86::CVTTSS2SIrr:return MakeRMInst(X86::CVTTSS2SIrm, FrameIndex, MI); - case X86::Int_CVTSD2SIrr: - return MakeRMInst(X86::Int_CVTSD2SIrm, FrameIndex, MI); - case X86::CVTTSD2SIrr:return MakeRMInst(X86::CVTTSD2SIrm, FrameIndex, MI); - case X86::CVTSS2SDrr:return MakeRMInst(X86::CVTSS2SDrm, FrameIndex, MI); - case X86::CVTSD2SSrr:return MakeRMInst(X86::CVTSD2SSrm, FrameIndex, MI); - case X86::CVTSI2SSrr:return MakeRMInst(X86::CVTSI2SSrm, FrameIndex, MI); - case X86::CVTSI2SDrr:return MakeRMInst(X86::CVTSI2SDrm, FrameIndex, MI); - case X86::Int_CVTTSS2SIrr: - return MakeRMInst(X86::Int_CVTTSS2SIrm, FrameIndex, MI); - case X86::Int_CVTTSD2SIrr: - return MakeRMInst(X86::Int_CVTTSD2SIrm, FrameIndex, MI); - case X86::Int_CVTSI2SSrr: - return MakeRMInst(X86::Int_CVTSI2SSrm, FrameIndex, MI); - case X86::SQRTSSr: return MakeRMInst(X86::SQRTSSm, FrameIndex, MI); - case X86::SQRTSDr: return MakeRMInst(X86::SQRTSDm, FrameIndex, MI); - case X86::ADDSSrr: return MakeRMInst(X86::ADDSSrm, FrameIndex, MI); - case X86::ADDSDrr: return MakeRMInst(X86::ADDSDrm, FrameIndex, MI); - case X86::MULSSrr: return MakeRMInst(X86::MULSSrm, FrameIndex, MI); - case X86::MULSDrr: return MakeRMInst(X86::MULSDrm, FrameIndex, MI); - case X86::DIVSSrr: return MakeRMInst(X86::DIVSSrm, FrameIndex, MI); - case X86::DIVSDrr: return MakeRMInst(X86::DIVSDrm, FrameIndex, MI); - case X86::SUBSSrr: return MakeRMInst(X86::SUBSSrm, FrameIndex, MI); - case X86::SUBSDrr: return MakeRMInst(X86::SUBSDrm, FrameIndex, MI); - case X86::CMPSSrr: return MakeRMInst(X86::CMPSSrm, FrameIndex, MI); - case X86::CMPSDrr: return MakeRMInst(X86::CMPSDrm, FrameIndex, MI); - case X86::Int_CMPSSrr: return MakeRMInst(X86::Int_CMPSSrm, FrameIndex, MI); - case X86::Int_CMPSDrr: return MakeRMInst(X86::Int_CMPSDrm, FrameIndex, MI); - case X86::UCOMISSrr: return MakeRMInst(X86::UCOMISSrm, FrameIndex, MI); - case X86::UCOMISDrr: return MakeRMInst(X86::UCOMISDrm, FrameIndex, MI); - case X86::Int_UCOMISSrr: - return MakeRMInst(X86::Int_UCOMISSrm, FrameIndex, MI); - case X86::Int_UCOMISDrr: - return MakeRMInst(X86::Int_UCOMISDrm, FrameIndex, MI); - case X86::Int_COMISSrr: - return MakeRMInst(X86::Int_COMISSrm, FrameIndex, MI); - case X86::Int_COMISDrr: - return MakeRMInst(X86::Int_COMISDrm, FrameIndex, MI); - // Packed SSE instructions - case X86::MOVAPSrr: return MakeRMInst(X86::MOVAPSrm, FrameIndex, MI); - case X86::MOVAPDrr: return MakeRMInst(X86::MOVAPDrm, FrameIndex, MI); - case X86::MOVUPSrr: return MakeRMInst(X86::MOVUPSrm, FrameIndex, MI); - case X86::MOVUPDrr: return MakeRMInst(X86::MOVUPDrm, FrameIndex, MI); - case X86::MOVSHDUPrr:return MakeRMInst(X86::MOVSHDUPrm, FrameIndex, MI); - case X86::MOVSLDUPrr:return MakeRMInst(X86::MOVSLDUPrm, FrameIndex, MI); - case X86::MOVDDUPrr: return MakeRMInst(X86::MOVDDUPrm, FrameIndex, MI); - case X86::Int_CVTDQ2PSrr: - return MakeRMInst(X86::Int_CVTDQ2PSrm, FrameIndex, MI); - case X86::Int_CVTDQ2PDrr: - return MakeRMInst(X86::Int_CVTDQ2PDrm, FrameIndex, MI); - case X86::Int_CVTPS2DQrr: - return MakeRMInst(X86::Int_CVTPS2DQrm, FrameIndex, MI); - case X86::Int_CVTTPS2DQrr: - return MakeRMInst(X86::Int_CVTTPS2DQrm, FrameIndex, MI); - case X86::Int_CVTPD2DQrr: - return MakeRMInst(X86::Int_CVTPD2DQrm, FrameIndex, MI); - case X86::Int_CVTTPD2DQrr: - return MakeRMInst(X86::Int_CVTTPD2DQrm, FrameIndex, MI); - case X86::Int_CVTPS2PDrr: - return MakeRMInst(X86::Int_CVTPS2PDrm, FrameIndex, MI); - case X86::Int_CVTPD2PSrr: - return MakeRMInst(X86::Int_CVTPD2PSrm, FrameIndex, MI); - case X86::Int_CVTSI2SDrr: - return MakeRMInst(X86::Int_CVTSI2SDrm, FrameIndex, MI); - case X86::Int_CVTSD2SSrr: - return MakeRMInst(X86::Int_CVTSD2SSrm, FrameIndex, MI); - case X86::Int_CVTSS2SDrr: - return MakeRMInst(X86::Int_CVTSS2SDrm, FrameIndex, MI); - case X86::ADDPSrr: return MakeRMInst(X86::ADDPSrm, FrameIndex, MI); - case X86::ADDPDrr: return MakeRMInst(X86::ADDPDrm, FrameIndex, MI); - case X86::SUBPSrr: return MakeRMInst(X86::SUBPSrm, FrameIndex, MI); - case X86::SUBPDrr: return MakeRMInst(X86::SUBPDrm, FrameIndex, MI); - case X86::MULPSrr: return MakeRMInst(X86::MULPSrm, FrameIndex, MI); - case X86::MULPDrr: return MakeRMInst(X86::MULPDrm, FrameIndex, MI); - case X86::DIVPSrr: return MakeRMInst(X86::DIVPSrm, FrameIndex, MI); - case X86::DIVPDrr: return MakeRMInst(X86::DIVPDrm, FrameIndex, MI); - case X86::ADDSUBPSrr:return MakeRMInst(X86::ADDSUBPSrm, FrameIndex, MI); - case X86::ADDSUBPDrr:return MakeRMInst(X86::ADDSUBPDrm, FrameIndex, MI); - case X86::HADDPSrr: return MakeRMInst(X86::HADDPSrm, FrameIndex, MI); - case X86::HADDPDrr: return MakeRMInst(X86::HADDPDrm, FrameIndex, MI); - case X86::HSUBPSrr: return MakeRMInst(X86::HSUBPSrm, FrameIndex, MI); - case X86::HSUBPDrr: return MakeRMInst(X86::HSUBPDrm, FrameIndex, MI); - case X86::SQRTPSr: return MakeRMInst(X86::SQRTPSm, FrameIndex, MI); - case X86::SQRTPDr: return MakeRMInst(X86::SQRTPDm, FrameIndex, MI); - case X86::RSQRTPSr: return MakeRMInst(X86::RSQRTPSm, FrameIndex, MI); - case X86::RCPPSr: return MakeRMInst(X86::RCPPSm, FrameIndex, MI); - case X86::MAXPSrr: return MakeRMInst(X86::MAXPSrm, FrameIndex, MI); - case X86::MAXPDrr: return MakeRMInst(X86::MAXPDrm, FrameIndex, MI); - case X86::MINPSrr: return MakeRMInst(X86::MINPSrm, FrameIndex, MI); - case X86::MINPDrr: return MakeRMInst(X86::MINPDrm, FrameIndex, MI); - case X86::ANDPSrr: return MakeRMInst(X86::ANDPSrm, FrameIndex, MI); - case X86::ANDPDrr: return MakeRMInst(X86::ANDPDrm, FrameIndex, MI); - case X86::ORPSrr: return MakeRMInst(X86::ORPSrm, FrameIndex, MI); - case X86::ORPDrr: return MakeRMInst(X86::ORPDrm, FrameIndex, MI); - case X86::XORPSrr: return MakeRMInst(X86::XORPSrm, FrameIndex, MI); - case X86::XORPDrr: return MakeRMInst(X86::XORPDrm, FrameIndex, MI); - case X86::ANDNPSrr: return MakeRMInst(X86::ANDNPSrm, FrameIndex, MI); - case X86::ANDNPDrr: return MakeRMInst(X86::ANDNPDrm, FrameIndex, MI); - case X86::CMPPSrri: return MakeRMIInst(X86::CMPPSrmi, FrameIndex, MI); - case X86::CMPPDrri: return MakeRMIInst(X86::CMPPDrmi, FrameIndex, MI); - case X86::SHUFPSrri: return MakeRMIInst(X86::SHUFPSrmi, FrameIndex, MI); - case X86::SHUFPDrri: return MakeRMIInst(X86::SHUFPDrmi, FrameIndex, MI); - case X86::UNPCKHPSrr:return MakeRMInst(X86::UNPCKHPSrm, FrameIndex, MI); - case X86::UNPCKHPDrr:return MakeRMInst(X86::UNPCKHPDrm, FrameIndex, MI); - case X86::UNPCKLPSrr:return MakeRMInst(X86::UNPCKLPSrm, FrameIndex, MI); - case X86::UNPCKLPDrr:return MakeRMInst(X86::UNPCKLPDrm, FrameIndex, MI); - case X86::PADDBrr: return MakeRMInst(X86::PADDBrm, FrameIndex, MI); - case X86::PADDWrr: return MakeRMInst(X86::PADDWrm, FrameIndex, MI); - case X86::PADDDrr: return MakeRMInst(X86::PADDDrm, FrameIndex, MI); - case X86::PADDSBrr: return MakeRMInst(X86::PADDSBrm, FrameIndex, MI); - case X86::PADDSWrr: return MakeRMInst(X86::PADDSWrm, FrameIndex, MI); - case X86::PSUBBrr: return MakeRMInst(X86::PSUBBrm, FrameIndex, MI); - case X86::PSUBWrr: return MakeRMInst(X86::PSUBWrm, FrameIndex, MI); - case X86::PSUBDrr: return MakeRMInst(X86::PSUBDrm, FrameIndex, MI); - case X86::PSUBSBrr: return MakeRMInst(X86::PSUBSBrm, FrameIndex, MI); - case X86::PSUBSWrr: return MakeRMInst(X86::PSUBSWrm, FrameIndex, MI); - case X86::PMULHUWrr: return MakeRMInst(X86::PMULHUWrm, FrameIndex, MI); - case X86::PMULHWrr: return MakeRMInst(X86::PMULHWrm, FrameIndex, MI); - case X86::PMULLWrr: return MakeRMInst(X86::PMULLWrm, FrameIndex, MI); - case X86::PMULUDQrr: return MakeRMInst(X86::PMULUDQrm, FrameIndex, MI); - case X86::PMADDWDrr: return MakeRMInst(X86::PMADDWDrm, FrameIndex, MI); - case X86::PAVGBrr: return MakeRMInst(X86::PAVGBrm, FrameIndex, MI); - case X86::PAVGWrr: return MakeRMInst(X86::PAVGWrm, FrameIndex, MI); - case X86::PMAXUBrr: return MakeRMInst(X86::PMAXUBrm, FrameIndex, MI); - case X86::PMAXSWrr: return MakeRMInst(X86::PMAXSWrm, FrameIndex, MI); - case X86::PMINUBrr: return MakeRMInst(X86::PMINUBrm, FrameIndex, MI); - case X86::PMINSWrr: return MakeRMInst(X86::PMINSWrm, FrameIndex, MI); - case X86::PSADBWrr: return MakeRMInst(X86::PSADBWrm, FrameIndex, MI); - case X86::PSLLWrr: return MakeRMInst(X86::PSLLWrm, FrameIndex, MI); - case X86::PSLLDrr: return MakeRMInst(X86::PSLLDrm, FrameIndex, MI); - case X86::PSLLQrr: return MakeRMInst(X86::PSLLQrm, FrameIndex, MI); - case X86::PSRLWrr: return MakeRMInst(X86::PSRLWrm, FrameIndex, MI); - case X86::PSRLDrr: return MakeRMInst(X86::PSRLDrm, FrameIndex, MI); - case X86::PSRLQrr: return MakeRMInst(X86::PSRLQrm, FrameIndex, MI); - case X86::PSRAWrr: return MakeRMInst(X86::PSRAWrm, FrameIndex, MI); - case X86::PSRADrr: return MakeRMInst(X86::PSRADrm, FrameIndex, MI); - case X86::PANDrr: return MakeRMInst(X86::PANDrm, FrameIndex, MI); - case X86::PORrr: return MakeRMInst(X86::PORrm, FrameIndex, MI); - case X86::PXORrr: return MakeRMInst(X86::PXORrm, FrameIndex, MI); - case X86::PANDNrr: return MakeRMInst(X86::PANDNrm, FrameIndex, MI); - case X86::PCMPEQBrr: return MakeRMInst(X86::PCMPEQBrm, FrameIndex, MI); - case X86::PCMPEQWrr: return MakeRMInst(X86::PCMPEQWrm, FrameIndex, MI); - case X86::PCMPEQDrr: return MakeRMInst(X86::PCMPEQDrm, FrameIndex, MI); - case X86::PCMPGTBrr: return MakeRMInst(X86::PCMPGTBrm, FrameIndex, MI); - case X86::PCMPGTWrr: return MakeRMInst(X86::PCMPGTWrm, FrameIndex, MI); - case X86::PCMPGTDrr: return MakeRMInst(X86::PCMPGTDrm, FrameIndex, MI); - case X86::PACKSSWBrr:return MakeRMInst(X86::PACKSSWBrm, FrameIndex, MI); - case X86::PACKSSDWrr:return MakeRMInst(X86::PACKSSDWrm, FrameIndex, MI); - case X86::PACKUSWBrr:return MakeRMInst(X86::PACKUSWBrm, FrameIndex, MI); - case X86::PSHUFDri: return MakeRMIInst(X86::PSHUFDmi, FrameIndex, MI); - case X86::PSHUFHWri: return MakeRMIInst(X86::PSHUFHWmi, FrameIndex, MI); - case X86::PSHUFLWri: return MakeRMIInst(X86::PSHUFLWmi, FrameIndex, MI); - case X86::PUNPCKLBWrr:return MakeRMInst(X86::PUNPCKLBWrm, FrameIndex, MI); - case X86::PUNPCKLWDrr:return MakeRMInst(X86::PUNPCKLWDrm, FrameIndex, MI); - case X86::PUNPCKLDQrr:return MakeRMInst(X86::PUNPCKLDQrm, FrameIndex, MI); - case X86::PUNPCKLQDQrr:return MakeRMInst(X86::PUNPCKLQDQrm, FrameIndex, MI); - case X86::PUNPCKHBWrr:return MakeRMInst(X86::PUNPCKHBWrm, FrameIndex, MI); - case X86::PUNPCKHWDrr:return MakeRMInst(X86::PUNPCKHWDrm, FrameIndex, MI); - case X86::PUNPCKHDQrr:return MakeRMInst(X86::PUNPCKHDQrm, FrameIndex, MI); - case X86::PUNPCKHQDQrr:return MakeRMInst(X86::PUNPCKHQDQrm, FrameIndex, MI); - case X86::PINSRWrri: return MakeRMIInst(X86::PINSRWrmi, FrameIndex, MI); - // Alias packed SSE instructions - case X86::MOVSS2PSrr:return MakeRMInst(X86::MOVSS2PSrm, FrameIndex, MI); - case X86::MOVSD2PDrr:return MakeRMInst(X86::MOVSD2PDrm, FrameIndex, MI); - case X86::MOVDI2PDIrr:return MakeRMInst(X86::MOVDI2PDIrm, FrameIndex, MI); - case X86::MOVQI2PQIrr:return MakeRMInst(X86::MOVQI2PQIrm, FrameIndex, MI); + static const TableEntry OpcodeTable[] = { + { X86::ADC32rr, X86::ADC32rm, makeRMInst }, + { X86::ADD16rr, X86::ADD16rm, makeRMInst }, + { X86::ADD32rr, X86::ADD32rm, makeRMInst }, + { X86::ADD8rr, X86::ADD8rm, makeRMInst }, + { X86::ADDPDrr, X86::ADDPDrm, makeRMInst }, + { X86::ADDPSrr, X86::ADDPSrm, makeRMInst }, + { X86::ADDSDrr, X86::ADDSDrm, makeRMInst }, + { X86::ADDSSrr, X86::ADDSSrm, makeRMInst }, + { X86::ADDSUBPDrr, X86::ADDSUBPDrm, makeRMInst }, + { X86::ADDSUBPSrr, X86::ADDSUBPSrm, makeRMInst }, + { X86::AND16rr, X86::AND16rm, makeRMInst }, + { X86::AND32rr, X86::AND32rm, makeRMInst }, + { X86::AND8rr, X86::AND8rm, makeRMInst }, + { X86::ANDNPDrr, X86::ANDNPDrm, makeRMInst }, + { X86::ANDNPSrr, X86::ANDNPSrm, makeRMInst }, + { X86::ANDPDrr, X86::ANDPDrm, makeRMInst }, + { X86::ANDPSrr, X86::ANDPSrm, makeRMInst }, + { X86::CMOVA16rr, X86::CMOVA16rm, makeRMInst }, + { X86::CMOVA32rr, X86::CMOVA32rm, makeRMInst }, + { X86::CMOVAE16rr, X86::CMOVAE16rm, makeRMInst }, + { X86::CMOVAE32rr, X86::CMOVAE32rm, makeRMInst }, + { X86::CMOVB16rr, X86::CMOVB16rm, makeRMInst }, + { X86::CMOVB32rr, X86::CMOVB32rm, makeRMInst }, + { X86::CMOVBE16rr, X86::CMOVBE16rm, makeRMInst }, + { X86::CMOVBE32rr, X86::CMOVBE32rm, makeRMInst }, + { X86::CMOVE16rr, X86::CMOVE16rm, makeRMInst }, + { X86::CMOVE32rr, X86::CMOVE32rm, makeRMInst }, + { X86::CMOVG16rr, X86::CMOVG16rm, makeRMInst }, + { X86::CMOVG32rr, X86::CMOVG32rm, makeRMInst }, + { X86::CMOVGE16rr, X86::CMOVGE16rm, makeRMInst }, + { X86::CMOVGE32rr, X86::CMOVGE32rm, makeRMInst }, + { X86::CMOVL16rr, X86::CMOVL16rm, makeRMInst }, + { X86::CMOVL32rr, X86::CMOVL32rm, makeRMInst }, + { X86::CMOVLE16rr, X86::CMOVLE16rm, makeRMInst }, + { X86::CMOVLE32rr, X86::CMOVLE32rm, makeRMInst }, + { X86::CMOVNE16rr, X86::CMOVNE16rm, makeRMInst }, + { X86::CMOVNE32rr, X86::CMOVNE32rm, makeRMInst }, + { X86::CMOVNP16rr, X86::CMOVNP16rm, makeRMInst }, + { X86::CMOVNP32rr, X86::CMOVNP32rm, makeRMInst }, + { X86::CMOVNS16rr, X86::CMOVNS16rm, makeRMInst }, + { X86::CMOVNS32rr, X86::CMOVNS32rm, makeRMInst }, + { X86::CMOVP16rr, X86::CMOVP16rm, makeRMInst }, + { X86::CMOVS16rr, X86::CMOVS16rm, makeRMInst }, + { X86::CMOVS32rr, X86::CMOVS32rm, makeRMInst }, + { X86::CMOVP32rr, X86::CMOVP32rm, makeRMInst }, + { X86::CMP16ri, X86::CMP16mi, makeMIInst }, + { X86::CMP16ri8, X86::CMP16mi8, makeMIInst }, + { X86::CMP16rr, X86::CMP16rm, makeRMInst }, + { X86::CMP32ri, X86::CMP32mi, makeMIInst }, + { X86::CMP32ri8, X86::CMP32mi8, makeRMInst }, + { X86::CMP32rr, X86::CMP32rm, makeRMInst }, + { X86::CMP8ri, X86::CMP8mi, makeRMInst }, + { X86::CMP8rr, X86::CMP8rm, makeRMInst }, + { X86::CMPPDrri, X86::CMPPDrmi, makeRMIInst }, + { X86::CMPPSrri, X86::CMPPSrmi, makeRMIInst }, + { X86::CMPSDrr, X86::CMPSDrm, makeRMInst }, + { X86::CMPSSrr, X86::CMPSSrm, makeRMInst }, + { X86::CVTSD2SSrr, X86::CVTSD2SSrm, makeRMInst }, + { X86::CVTSI2SDrr, X86::CVTSI2SDrm, makeRMInst }, + { X86::CVTSI2SSrr, X86::CVTSI2SSrm, makeRMInst }, + { X86::CVTSS2SDrr, X86::CVTSS2SDrm, makeRMInst }, + { X86::CVTTSD2SIrr, X86::CVTTSD2SIrm, makeRMInst }, + { X86::CVTTSS2SIrr, X86::CVTTSS2SIrm, makeRMInst }, + { X86::DIVPDrr, X86::DIVPDrm, makeRMInst }, + { X86::DIVPSrr, X86::DIVPSrm, makeRMInst }, + { X86::DIVSDrr, X86::DIVSDrm, makeRMInst }, + { X86::DIVSSrr, X86::DIVSSrm, makeRMInst }, + { X86::FsMOVAPDrr, X86::MOVSDrm, makeRMInst }, + { X86::FsMOVAPSrr, X86::MOVSSrm, makeRMInst }, + { X86::HADDPDrr, X86::HADDPDrm, makeRMInst }, + { X86::HADDPSrr, X86::HADDPSrm, makeRMInst }, + { X86::HSUBPDrr, X86::HSUBPDrm, makeRMInst }, + { X86::HSUBPSrr, X86::HSUBPSrm, makeRMInst }, + { X86::IMUL16rr, X86::IMUL16rm, makeRMInst }, + { X86::IMUL16rri, X86::IMUL16rmi, makeRMIInst }, + { X86::IMUL16rri8, X86::IMUL16rmi8, makeRMIInst }, + { X86::IMUL32rr, X86::IMUL32rm, makeRMInst }, + { X86::IMUL32rri, X86::IMUL32rmi, makeRMIInst }, + { X86::IMUL32rri8, X86::IMUL32rmi8, makeRMIInst }, + { X86::Int_CMPSDrr, X86::Int_CMPSDrm, makeRMInst }, + { X86::Int_CMPSSrr, X86::Int_CMPSSrm, makeRMInst }, + { X86::Int_COMISDrr, X86::Int_COMISDrm, makeRMInst }, + { X86::Int_COMISSrr, X86::Int_COMISSrm, makeRMInst }, + { X86::Int_CVTDQ2PDrr, X86::Int_CVTDQ2PDrm, makeRMInst }, + { X86::Int_CVTDQ2PSrr, X86::Int_CVTDQ2PSrm, makeRMInst }, + { X86::Int_CVTPD2DQrr, X86::Int_CVTPD2DQrm, makeRMInst }, + { X86::Int_CVTPD2PSrr, X86::Int_CVTPD2PSrm, makeRMInst }, + { X86::Int_CVTPS2DQrr, X86::Int_CVTPS2DQrm, makeRMInst }, + { X86::Int_CVTPS2PDrr, X86::Int_CVTPS2PDrm, makeRMInst }, + { X86::Int_CVTSD2SIrr, X86::Int_CVTSD2SIrm, makeRMInst }, + { X86::Int_CVTSD2SSrr, X86::Int_CVTSD2SSrm, makeRMInst }, + { X86::Int_CVTSI2SDrr, X86::Int_CVTSI2SDrm, makeRMInst }, + { X86::Int_CVTSI2SSrr, X86::Int_CVTSI2SSrm, makeRMInst }, + { X86::Int_CVTSS2SDrr, X86::Int_CVTSS2SDrm, makeRMInst }, + { X86::Int_CVTSS2SIrr, X86::Int_CVTSS2SIrm, makeRMInst }, + { X86::Int_CVTTPD2DQrr, X86::Int_CVTTPD2DQrm, makeRMInst }, + { X86::Int_CVTTPS2DQrr, X86::Int_CVTTPS2DQrm, makeRMInst }, + { X86::Int_CVTTSD2SIrr, X86::Int_CVTTSD2SIrm, makeRMInst }, + { X86::Int_CVTTSS2SIrr, X86::Int_CVTTSS2SIrm, makeRMInst }, + { X86::Int_UCOMISDrr, X86::Int_UCOMISDrm, makeRMInst }, + { X86::Int_UCOMISSrr, X86::Int_UCOMISSrm, makeRMInst }, + { X86::MAXPDrr, X86::MAXPDrm, makeRMInst }, + { X86::MAXPSrr, X86::MAXPSrm, makeRMInst }, + { X86::MINPDrr, X86::MINPDrm, makeRMInst }, + { X86::MINPSrr, X86::MINPSrm, makeRMInst }, + { X86::MOV16rr, X86::MOV16rm, makeRMInst }, + { X86::MOV32rr, X86::MOV32rm, makeRMInst }, + { X86::MOV8rr, X86::MOV8rm, makeRMInst }, + { X86::MOVAPDrr, X86::MOVAPDrm, makeRMInst }, + { X86::MOVAPSrr, X86::MOVAPSrm, makeRMInst }, + { X86::MOVDDUPrr, X86::MOVDDUPrm, makeRMInst }, + { X86::MOVDI2PDIrr, X86::MOVDI2PDIrm, makeRMInst }, + { X86::MOVQI2PQIrr, X86::MOVQI2PQIrm, makeRMInst }, + { X86::MOVSD2PDrr, X86::MOVSD2PDrm, makeRMInst }, + { X86::MOVSDrr, X86::MOVSDrm, makeRMInst }, + { X86::MOVSHDUPrr, X86::MOVSHDUPrm, makeRMInst }, + { X86::MOVSLDUPrr, X86::MOVSLDUPrm, makeRMInst }, + { X86::MOVSS2PSrr, X86::MOVSS2PSrm, makeRMInst }, + { X86::MOVSSrr, X86::MOVSSrm, makeRMInst }, + { X86::MOVSX16rr8, X86::MOVSX16rm8, makeRMInst }, + { X86::MOVSX32rr16, X86::MOVSX32rm16, makeRMInst }, + { X86::MOVSX32rr8, X86::MOVSX32rm8, makeRMInst }, + { X86::MOVUPDrr, X86::MOVUPDrm, makeRMInst }, + { X86::MOVUPSrr, X86::MOVUPSrm, makeRMInst }, + { X86::MOVZX16rr8, X86::MOVZX16rm8, makeRMInst }, + { X86::MOVZX32rr16, X86::MOVZX32rm16, makeRMInst }, + { X86::MOVZX32rr8, X86::MOVZX32rm8, makeRMInst }, + { X86::MULPDrr, X86::MULPDrm, makeRMInst }, + { X86::MULPSrr, X86::MULPSrm, makeRMInst }, + { X86::MULSDrr, X86::MULSDrm, makeRMInst }, + { X86::MULSSrr, X86::MULSSrm, makeRMInst }, + { X86::OR16rr, X86::OR16rm, makeRMInst }, + { X86::OR32rr, X86::OR32rm, makeRMInst }, + { X86::OR8rr, X86::OR8rm, makeRMInst }, + { X86::ORPDrr, X86::ORPDrm, makeRMInst }, + { X86::ORPSrr, X86::ORPSrm, makeRMInst }, + { X86::PACKSSDWrr, X86::PACKSSDWrm, makeRMInst }, + { X86::PACKSSWBrr, X86::PACKSSWBrm, makeRMInst }, + { X86::PACKUSWBrr, X86::PACKUSWBrm, makeRMInst }, + { X86::PADDBrr, X86::PADDBrm, makeRMInst }, + { X86::PADDDrr, X86::PADDDrm, makeRMInst }, + { X86::PADDSBrr, X86::PADDSBrm, makeRMInst }, + { X86::PADDSWrr, X86::PADDSWrm, makeRMInst }, + { X86::PADDWrr, X86::PADDWrm, makeRMInst }, + { X86::PANDNrr, X86::PANDNrm, makeRMInst }, + { X86::PANDrr, X86::PANDrm, makeRMInst }, + { X86::PAVGBrr, X86::PAVGBrm, makeRMInst }, + { X86::PAVGWrr, X86::PAVGWrm, makeRMInst }, + { X86::PCMPEQBrr, X86::PCMPEQBrm, makeRMInst }, + { X86::PCMPEQDrr, X86::PCMPEQDrm, makeRMInst }, + { X86::PCMPEQWrr, X86::PCMPEQWrm, makeRMInst }, + { X86::PCMPGTBrr, X86::PCMPGTBrm, makeRMInst }, + { X86::PCMPGTDrr, X86::PCMPGTDrm, makeRMInst }, + { X86::PCMPGTWrr, X86::PCMPGTWrm, makeRMInst }, + { X86::PINSRWrri, X86::PINSRWrmi, makeRMIInst }, + { X86::PMADDWDrr, X86::PMADDWDrm, makeRMInst }, + { X86::PMAXSWrr, X86::PMAXSWrm, makeRMInst }, + { X86::PMAXUBrr, X86::PMAXUBrm, makeRMInst }, + { X86::PMINSWrr, X86::PMINSWrm, makeRMInst }, + { X86::PMINUBrr, X86::PMINUBrm, makeRMInst }, + { X86::PMULHUWrr, X86::PMULHUWrm, makeRMInst }, + { X86::PMULHWrr, X86::PMULHWrm, makeRMInst }, + { X86::PMULLWrr, X86::PMULLWrm, makeRMInst }, + { X86::PMULUDQrr, X86::PMULUDQrm, makeRMInst }, + { X86::PORrr, X86::PORrm, makeRMInst }, + { X86::PSADBWrr, X86::PSADBWrm, makeRMInst }, + { X86::PSHUFDri, X86::PSHUFDmi, makeRMIInst }, + { X86::PSHUFHWri, X86::PSHUFHWmi, makeRMIInst }, + { X86::PSHUFLWri, X86::PSHUFLWmi, makeRMIInst }, + { X86::PSLLDrr, X86::PSLLDrm, makeRMInst }, + { X86::PSLLQrr, X86::PSLLQrm, makeRMInst }, + { X86::PSLLWrr, X86::PSLLWrm, makeRMInst }, + { X86::PSRADrr, X86::PSRADrm, makeRMInst }, + { X86::PSRAWrr, X86::PSRAWrm, makeRMInst }, + { X86::PSRLDrr, X86::PSRLDrm, makeRMInst }, + { X86::PSRLQrr, X86::PSRLQrm, makeRMInst }, + { X86::PSRLWrr, X86::PSRLWrm, makeRMInst }, + { X86::PSUBBrr, X86::PSUBBrm, makeRMInst }, + { X86::PSUBDrr, X86::PSUBDrm, makeRMInst }, + { X86::PSUBSBrr, X86::PSUBSBrm, makeRMInst }, + { X86::PSUBSWrr, X86::PSUBSWrm, makeRMInst }, + { X86::PSUBWrr, X86::PSUBWrm, makeRMInst }, + { X86::PUNPCKHBWrr, X86::PUNPCKHBWrm, makeRMInst }, + { X86::PUNPCKHDQrr, X86::PUNPCKHDQrm, makeRMInst }, + { X86::PUNPCKHQDQrr, X86::PUNPCKHQDQrm, makeRMInst }, + { X86::PUNPCKHWDrr, X86::PUNPCKHWDrm, makeRMInst }, + { X86::PUNPCKLBWrr, X86::PUNPCKLBWrm, makeRMInst }, + { X86::PUNPCKLDQrr, X86::PUNPCKLDQrm, makeRMInst }, + { X86::PUNPCKLQDQrr, X86::PUNPCKLQDQrm, makeRMInst }, + { X86::PUNPCKLWDrr, X86::PUNPCKLWDrm, makeRMInst }, + { X86::PXORrr, X86::PXORrm, makeRMInst }, + { X86::RCPPSr, X86::RCPPSm, makeRMInst }, + { X86::RSQRTPSr, X86::RSQRTPSm, makeRMInst }, + { X86::SBB32rr, X86::SBB32rm, makeRMInst }, + { X86::SHUFPDrri, X86::SHUFPDrmi, makeRMIInst }, + { X86::SHUFPSrri, X86::SHUFPSrmi, makeRMIInst }, + { X86::SQRTPDr, X86::SQRTPDm, makeRMInst }, + { X86::SQRTPSr, X86::SQRTPSm, makeRMInst }, + { X86::SQRTSDr, X86::SQRTSDm, makeRMInst }, + { X86::SQRTSSr, X86::SQRTSSm, makeRMInst }, + { X86::SUB16rr, X86::SUB16rm, makeRMInst }, + { X86::SUB32rr, X86::SUB32rm, makeRMInst }, + { X86::SUB8rr, X86::SUB8rm, makeRMInst }, + { X86::SUBPDrr, X86::SUBPDrm, makeRMInst }, + { X86::SUBPSrr, X86::SUBPSrm, makeRMInst }, + { X86::SUBSDrr, X86::SUBSDrm, makeRMInst }, + { X86::SUBSSrr, X86::SUBSSrm, makeRMInst }, + { X86::TEST16ri, X86::TEST16mi, makeMIInst }, + { X86::TEST16rr, X86::TEST16rm, makeRMInst }, + { X86::TEST32ri, X86::TEST32mi, makeMIInst }, + { X86::TEST32rr, X86::TEST32rm, makeRMInst }, + { X86::TEST8ri, X86::TEST8mi, makeMIInst }, + { X86::TEST8rr, X86::TEST8rm, makeRMInst }, + { X86::UCOMISDrr, X86::UCOMISDrm, makeRMInst }, + { X86::UCOMISSrr, X86::UCOMISSrm, makeRMInst }, + { X86::UNPCKHPDrr, X86::UNPCKHPDrm, makeRMInst }, + { X86::UNPCKHPSrr, X86::UNPCKHPSrm, makeRMInst }, + { X86::UNPCKLPDrr, X86::UNPCKLPDrm, makeRMInst }, + { X86::UNPCKLPSrr, X86::UNPCKLPSrm, makeRMInst }, + { X86::XCHG16rr, X86::XCHG16rm, makeRMInst }, + { X86::XCHG32rr, X86::XCHG32rm, makeRMInst }, + { X86::XCHG8rr, X86::XCHG8rm, makeRMInst }, + { X86::XOR16rr, X86::XOR16rm, makeRMInst }, + { X86::XOR32rr, X86::XOR32rm, makeRMInst }, + { X86::XOR8rr, X86::XOR8rm, makeRMInst }, + { X86::XORPDrr, X86::XORPDrm, makeRMInst }, + { X86::XORPSrr, X86::XORPSrm, makeRMInst } + }; + OpcodeTablePtr = OpcodeTable; + OpcodeTableSize = ARRAY_SIZE(OpcodeTable); + } + + // If table selected + if (OpcodeTablePtr) { + // Opcode to translate + unsigned fromOpcode = MI->getOpcode(); + // Type of make to use + unsigned make; + // Lookup fromOpcode in table + int toOpcode = Lookup(OpcodeTablePtr, OpcodeTableSize, fromOpcode, make); + + // If opcode found in table + if (toOpcode != -1) { + // Make new instruction + switch (make) { + case makeM0Inst: return MakeM0Inst(toOpcode, FrameIndex, MI); + case makeMIInst: return MakeMIInst(toOpcode, FrameIndex, MI); + case makeMInst: return MakeMInst(toOpcode, FrameIndex, MI); + case makeMRIInst: return MakeMRIInst(toOpcode, FrameIndex, MI); + case makeMRInst: return MakeMRInst(toOpcode, FrameIndex, MI); + case makeRMIInst: return MakeRMIInst(toOpcode, FrameIndex, MI); + case makeRMInst: return MakeRMInst(toOpcode, FrameIndex, MI); + default: assert(0 && "Unknown instruction make"); + } } } + + // No fusion if (PrintFailedFusing) std::cerr << "We failed to fuse (" << ((i == 1) ? "r" : "s") << "): " << *MI; return NULL; } + const unsigned *X86RegisterInfo::getCalleeSaveRegs() const { static const unsigned CalleeSaveRegs[] = { X86::ESI, X86::EDI, X86::EBX, X86::EBP, 0 From pjenkins at apple.com Wed Jul 19 12:54:44 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Wed, 19 Jul 2006 12:54:44 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607191754.MAA01624@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.18 -> 1.19 --- Log message: Added mysql describe table printouts to the top of functions that use those tables. Changed the format of the test result email to reflect what Chris asked for. This is not complete but is a start. Made changes to how passing tests and failing tests are organized in the database. --- Diffs of the changes: (+85 -37) NightlyTestAccept.cgi | 122 ++++++++++++++++++++++++++++++++++---------------- 1 files changed, 85 insertions(+), 37 deletions(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.18 nightlytest-serverside/NightlyTestAccept.cgi:1.19 --- nightlytest-serverside/NightlyTestAccept.cgi:1.18 Tue Jul 18 12:13:44 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Wed Jul 19 12:54:32 2006 @@ -95,6 +95,22 @@ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # +# mysql> describe machine; +# +-----------+----------+------+-----+---------+----------------+ +# | Field | Type | Null | Key | Default | Extra | +# +-----------+----------+------+-----+---------+----------------+ +# | id | int(11) | | PRI | NULL | auto_increment | +# | uname | text | | | | | +# | hardware | text | | | | | +# | os | text | | | | | +# | name | text | | | | | +# | nickname | tinytext | YES | | NULL | | +# | gcc | text | YES | | NULL | | +# | directory | text | YES | | NULL | | +# +-----------+----------+------+-----+---------+----------------+ +# 8 rows in set (0.00 sec) +# +# # Creates an entry in the machine table in the database # #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -129,38 +145,41 @@ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #Since this is ugly, iv included an example call and a view of the table. # -#+---------------------+------------+------+-----+---------+----------------+ -#| Field | Type | Null | Key | Default | Extra | -#+---------------------+------------+------+-----+---------+----------------+ -#| id | int(11) | NO | PRI | NULL | auto_increment | -#| machine | int(11) | NO | | | | -#| added | datetime | YES | | NULL | | -#| buildstatus | tinytext | YES | | NULL | | -#| configuretime_cpu | double | YES | | NULL | | -#| configuretime_wall | double | YES | | NULL | | -#| getcvstime_cpu | double | YES | | NULL | | -#| getcvstime_wall | double | YES | | NULL | | -#| buildtime_cpu | double | YES | | NULL | | -#| buildtime_wall | double | YES | | NULL | | -#| dejagnutime_cpu | double | YES | | NULL | | -#| dejagnutime_wall | double | YES | | NULL | | -#| warnings | mediumtext | YES | | NULL | | -#| warnings_added | text | YES | | NULL | | -#| warnings_removed | text | YES | | NULL | | -#| teststats_exppass | int(11) | YES | | NULL | | -#| teststats_unexpfail | int(11) | YES | | NULL | | -#| teststats_expfail | int(11) | YES | | NULL | | -#| unexpfail_tests | text | YES | | NULL | | -#| newly_passing_tests | text | YES | | NULL | | -#| newly_failing_tests | text | YES | | NULL | | -#| new_tests | text | YES | | NULL | | -#| removed_tests | text | YES | | NULL | | -#| cvs_added | text | YES | | NULL | | -#| cvs_removed | text | YES | | NULL | | -#| cvs_modified | text | YES | | NULL | | -#| cvs_usersadd | text | YES | | NULL | | -#| cvs_usersco | text | YES | | NULL | | -#+---------------------+------------+------+-----+---------+----------------+ +# +---------------------+------------+------+-----+---------+----------------+ +# | Field | Type | Null | Key | Default | Extra | +# +---------------------+------------+------+-----+---------+----------------+ +# | id | int(11) | | PRI | NULL | auto_increment | +# | machine | text | | | | | +# | added | datetime | YES | | NULL | | +# | buildstatus | tinytext | YES | | NULL | | +# | getcvstime_cpu | double | YES | | NULL | | +# | getcvstime_wall | double | YES | | NULL | | +# | configuretime_cpu | double | YES | | NULL | | +# | configuretime_wall | double | YES | | NULL | | +# | buildtime_cpu | double | YES | | NULL | | +# | buildtime_wall | double | YES | | NULL | | +# | dejagnutime_cpu | double | YES | | NULL | | +# | dejagnutime_wall | double | YES | | NULL | | +# | warnings | mediumtext | YES | | NULL | | +# | warnings_added | text | YES | | NULL | | +# | warnings_removed | text | YES | | NULL | | +# | teststats_exppass | int(11) | YES | | NULL | | +# | teststats_unexpfail | int(11) | YES | | NULL | | +# | teststats_expfail | int(11) | YES | | NULL | | +# | all_tests | text | YES | | NULL | | +# | passing_tests | text | YES | | NULL | | +# | unexpfail_tests | text | YES | | NULL | | +# | expfail_tests | text | YES | | NULL | | +# | newly_passing_tests | text | YES | | NULL | | +# | newly_failing_tests | text | YES | | NULL | | +# | new_tests | text | YES | | NULL | | +# | removed_tests | text | YES | | NULL | | +# | cvs_added | text | YES | | NULL | | +# | cvs_removed | text | YES | | NULL | | +# | cvs_modified | text | YES | | NULL | | +# | cvs_usersadd | text | YES | | NULL | | +# | cvs_usersco | text | YES | | NULL | | +# +---------------------+------------+------+-----+---------+----------------+ # # #CreateNight $machine_id, $db_date, $buildstatus, @@ -220,6 +239,18 @@ } #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# mysql> describe program; +# +---------+---------+------+-----+---------+-------+ +# | Field | Type | Null | Key | Default | Extra | +# +---------+---------+------+-----+---------+-------+ +# | program | text | | | | | +# | result | text | YES | | NULL | | +# | type | text | YES | | NULL | | +# | night | int(11) | | | 0 | | +# +---------+---------+------+-----+---------+-------+ +# 4 rows in set (0.00 sec) +# #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub AddProgram{ #$program, $result, $type, $night my $d = $dbh->prepare("INSERT INTO program (program, result, type, night) VALUES (\"$_[0]\", \"$_[1]\", \"$_[2]\", $_[3])"); @@ -228,6 +259,17 @@ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # +# mysql> describe code; +# +-------+----------+------+-----+---------------------+-------+ +# | Field | Type | Null | Key | Default | Extra | +# +-------+----------+------+-----+---------------------+-------+ +# | added | datetime | | | 0000-00-00 00:00:00 | | +# | loc | int(11) | | | 0 | | +# | files | int(11) | | | 0 | | +# | dirs | int(11) | | | 0 | | +# +-------+----------+------+-----+---------------------+-------+ +# 4 rows in set (0.00 sec) +# # This function checks to see if the last entered values in the database # about code information are the same as our current information. If they # differ we will put our information into the database. @@ -308,10 +350,12 @@ my $cvsusercommitlist=param('cvsusercommitlist'); my $cvsuserupdatelist=param('cvsuserupdatelist'); my $buildstatus=param('buildstatus'); - my $warnings_added=param('warnings_removed'); my $warnings_removed=param('warnings_added'); +my $all_tests=param('all_tests'); my $unexpfail_tests=param('unexpfail_tests'); +my $passing_tests = param('passing_tests'); +my $expfail_tests = param('expfail_tests'); my $newly_passing_tests=param('newly_passing_tests'); my $newly_failing_tests=param('newly_failing_tests'); my $new_tests=param('new_tests'); @@ -320,7 +364,7 @@ my $warnings = param('warnings'); my $lines_of_code = param('lines_of_code'); my $cvs_dir_count = param('cvs_file_count'); -my $cvs_file_count = param('cvs_dir_count'); +my $cvs_file_count = param('cvs_dir_count'); ###################################################################################################### @@ -451,9 +495,13 @@ # ###################################################################################################### -$email = "$machine_data\n\nBuild Status: $buildstatus\n\ncvs user commit list:\n". - "$cvsusercommitlist\n\ncvs user ". - "update list:\n$cvsuserupdatelist\n\ncvs changed files:\n$cvsmodifiedfiles\n"; +$link_to_page="http://llvm.org/nightlytest/machine.php?machine=$machine_id"; +$email = "$link_to_page"; +$email .= "Name: $name\n"; +$email .= "Nickname: $nickname\n"; +$email .= "Buildstatus: $buildstatus\n"; +$email .= "\nUnexpected Failures:\n$unexpfail_tests\n"; + $email_addr = "llvm-testresults\@cs.uiuc.edu"; `echo "$email" | mail -s '$nickname $hardware nightly tester results' $email_addr`; From lattner at cs.uiuc.edu Wed Jul 19 12:58:10 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 19 Jul 2006 12:58:10 -0500 Subject: [llvm-commits] CVS: llvm-www/testresults/index.html Message-ID: <200607191758.MAA01674@zion.cs.uiuc.edu> Changes in directory llvm-www/testresults: index.html updated: 1.42 -> 1.43 --- Log message: Point to the new tester. --- Diffs of the changes: (+2 -61) index.html | 63 +------------------------------------------------------------ 1 files changed, 2 insertions(+), 61 deletions(-) Index: llvm-www/testresults/index.html diff -u llvm-www/testresults/index.html:1.42 llvm-www/testresults/index.html:1.43 --- llvm-www/testresults/index.html:1.42 Sat Feb 25 12:37:42 2006 +++ llvm-www/testresults/index.html Wed Jul 19 12:57:58 2006 @@ -6,67 +6,8 @@

-

This directory contains test results which are automatically generated every -night on the following platforms. This system is still under development, but -will eventually feature an automatic "blame" system, which emails people who -break test cases. This is intended to track, over time, the CVS repository, -test suite conformance, and performance of code generated by the compiler.

- -

-Note that the results of these testers are summarized and sent to the llvm-testresults -mailing list. -

- -

Alpha

-
    - -
  1. Linux (Single 21264 EV67 -633 MHz) -- release build
  2. - -
  3. Linux (Dual 21264 -EV6 500 MHz) -- debug build
  4. -
- -

IA-64

-
    - -
  1. Debian GNU/Linux -unstable, dual Itanium2(tm) 1.5GHz -- debug build
  2. - -
  3. Debian GNU/Linux -unstable, dual Itanium 2 1.6GHz -- debug build
  4. -
- -

PowerPC

-
    - -
  1. Mac OS X 10.4 -"Tiger" on PowerPC G5 (dual 1.8Ghz CPU) -- debug build
  2. -
- -

SPARC

-
    - -
  1. SunOS 5.8 on -Sun Fire V240 (dual 1Ghz CPU) -- debug build ("V8" backend)
  2. -
- -

X86

-
    - -
  1. Linux (Dual P4 Xeon @ 3.06GHz) -- debug build
  2. - -
  3. FreeBSD 6.0BETA (Pentium -3 @ 1.0Ghz) -- debug build
  4. - -
  5. FreeBSD-CURRENT -(Single Pentium M @ 2.3GHz) -- release build
  6. - -
  7. Debian GNU/Linux -unstable, dual Xeon(TM) 3.20GHz -- debug build
  8. - -
+

This page is obsolete, please see the new nightly tester page.

From lattner at cs.uiuc.edu Wed Jul 19 13:20:11 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 19 Jul 2006 13:20:11 -0500 Subject: [llvm-commits] CVS: llvm/docs/FAQ.html Message-ID: <200607191820.NAA02102@zion.cs.uiuc.edu> Changes in directory llvm/docs: FAQ.html updated: 1.36 -> 1.37 --- Log message: Answer the FAQ: "can llvm convert C++ code to C?" --- Diffs of the changes: (+58 -1) FAQ.html | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 58 insertions(+), 1 deletion(-) Index: llvm/docs/FAQ.html diff -u llvm/docs/FAQ.html:1.36 llvm/docs/FAQ.html:1.37 --- llvm/docs/FAQ.html:1.36 Wed Apr 26 16:03:17 2006 +++ llvm/docs/FAQ.html Wed Jul 19 13:19:59 2006 @@ -79,6 +79,8 @@ How can I disable all optimizations when compiling code using the LLVM GCC front end? +
  • Can I use LLVM to convert C++ code to C code?
  • + @@ -501,6 +503,61 @@

    + + + +
    +

    Yes, you can use LLVM to convert code from any language LLVM supports to C. +Note that the generated C code will be very low level (all loops are lowered +to gotos, etc) and not very pretty (comments are stripped, original source +formatting is totally lost, variables are renamed, expressions are regrouped), +so this may not be what you're looking for. However, this is a good way to add +C++ support for a processor that does not otherwise have a C++ compiler. +

    + +

    Use commands like this:

    + +
      +
    1. Compile your program as normal with llvm-g++:

    2. + +
      $ llvm-g++ x.cpp -o program
      + +

      or:

      + +
      + llvm-g++ a.cpp -c + llvm-g++ b.cpp -c + llvm-g++ a.o b.o -o program +
      + +

      With llvm-gcc3, this will generate program and program.bc. The .bc file is +the LLVM version of the program all linked together.

      + +
    3. Convert the LLVM code to C code, using the LLC tool with the C +backend:

    4. + +
      $ llc -march=c program.bc -o program.c
      + +
    5. Finally, compile the c file:

    6. + +
      $ cc x.c
      + +
    + +

    Note that, by default, the C backend does not support exception handling. +If you want/need it for a certain program, you can enable it by passing +"-enable-correct-eh-support" to the llc program. The resultant code will +use setjmp/longjmp to implement exception support that is correct but +relatively slow. +

    +
    + + +
    Questions about code generated by the GCC front-end @@ -614,7 +671,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"> LLVM Compiler Infrastructure
    - Last modified: $Date: 2006/04/26 21:03:17 $ + Last modified: $Date: 2006/07/19 18:19:59 $ From jlaskey at apple.com Wed Jul 19 14:32:18 2006 From: jlaskey at apple.com (Jim Laskey) Date: Wed, 19 Jul 2006 14:32:18 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp Message-ID: <200607191932.OAA02758@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86RegisterInfo.cpp updated: 1.160 -> 1.161 --- Log message: Tidy up a few things. --- Diffs of the changes: (+36 -20) X86RegisterInfo.cpp | 56 +++++++++++++++++++++++++++++++++------------------- 1 files changed, 36 insertions(+), 20 deletions(-) Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.160 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.161 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.160 Wed Jul 19 12:53:32 2006 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Wed Jul 19 14:32:06 2006 @@ -199,10 +199,15 @@ //===----------------------------------------------------------------------===// namespace { + /// TableEntry - Maps the 'from' opcode to a fused form of the 'to' opcode. + /// struct TableEntry { - unsigned from; - unsigned to; - unsigned make; + unsigned from; // Original opcode. + unsigned to; // New opcode. + unsigned make; // Form of make required to produce the + // new instruction. + + // less operators used by STL search. bool operator<(const TableEntry &TE) const { return from < TE.from; } friend bool operator<(const TableEntry &TE, unsigned V) { return TE.from < V; @@ -213,20 +218,26 @@ }; } +/// TableIsSorted - Return true if the table is in 'from' opcode order. +/// static bool TableIsSorted(const TableEntry *Table, unsigned NumEntries) { - for (unsigned i = 0; i != NumEntries-1; ++i) - if (!(Table[i] < Table[i+1])) return false; + for (unsigned i = 1; i != NumEntries; ++i) + if (!(Table[i-1] < Table[i])) { + std::cerr << "Entries out of order" << Table[i-1].from + << " " << Table[i].from << "\n"; + return false; + } return true; } -static int Lookup(const TableEntry *Table, unsigned N, unsigned Opcode, - unsigned &make) { +/// TableLookup - Return the table entry matching the specified opcode. +/// Otherwise return NULL. +static const TableEntry *TableLookup(const TableEntry *Table, unsigned N, + unsigned Opcode) { const TableEntry *I = std::lower_bound(Table, Table+N, Opcode); - if (I != Table+N && I->from == Opcode) { - make = I->make; - return I->to; - } - return -1; + if (I != Table+N && I->from == Opcode) + return I; + return NULL; } #define ARRAY_SIZE(TABLE) \ @@ -237,9 +248,11 @@ #else #define ASSERT_SORTED(TABLE) \ { static bool TABLE##Checked = false; \ - if (!TABLE##Checked) \ + if (!TABLE##Checked) { \ assert(TableIsSorted(TABLE, ARRAY_SIZE(TABLE)) && \ "All lookup tables must be sorted for efficient access!"); \ + TABLE##Checked = true; \ + } \ } #endif @@ -474,9 +487,9 @@ { X86::CMOVNS16rr, X86::CMOVNS16rm, makeRMInst }, { X86::CMOVNS32rr, X86::CMOVNS32rm, makeRMInst }, { X86::CMOVP16rr, X86::CMOVP16rm, makeRMInst }, + { X86::CMOVP32rr, X86::CMOVP32rm, makeRMInst }, { X86::CMOVS16rr, X86::CMOVS16rm, makeRMInst }, { X86::CMOVS32rr, X86::CMOVS32rm, makeRMInst }, - { X86::CMOVP32rr, X86::CMOVP32rm, makeRMInst }, { X86::CMP16ri, X86::CMP16mi, makeMIInst }, { X86::CMP16ri8, X86::CMP16mi8, makeMIInst }, { X86::CMP16rr, X86::CMP16rm, makeRMInst }, @@ -660,23 +673,26 @@ { X86::XORPDrr, X86::XORPDrm, makeRMInst }, { X86::XORPSrr, X86::XORPSrm, makeRMInst } }; + ASSERT_SORTED(OpcodeTable); OpcodeTablePtr = OpcodeTable; OpcodeTableSize = ARRAY_SIZE(OpcodeTable); } // If table selected if (OpcodeTablePtr) { - // Opcode to translate + // Opcode to fuse unsigned fromOpcode = MI->getOpcode(); - // Type of make to use - unsigned make; // Lookup fromOpcode in table - int toOpcode = Lookup(OpcodeTablePtr, OpcodeTableSize, fromOpcode, make); + const TableEntry *entry = TableLookup(OpcodeTablePtr, OpcodeTableSize, + fromOpcode); // If opcode found in table - if (toOpcode != -1) { + if (entry) { + // Fused opcode + unsigned toOpcode = entry->to; + // Make new instruction - switch (make) { + switch (entry->make) { case makeM0Inst: return MakeM0Inst(toOpcode, FrameIndex, MI); case makeMIInst: return MakeMIInst(toOpcode, FrameIndex, MI); case makeMInst: return MakeMInst(toOpcode, FrameIndex, MI); From jlaskey at apple.com Wed Jul 19 14:33:21 2006 From: jlaskey at apple.com (Jim Laskey) Date: Wed, 19 Jul 2006 14:33:21 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp Message-ID: <200607191933.OAA02780@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.51 -> 1.52 --- Log message: Do once flag never set to true. --- Diffs of the changes: (+3 -1) X86FloatingPoint.cpp | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.51 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.52 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.51 Wed Jun 28 18:27:49 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cpp Wed Jul 19 14:33:08 2006 @@ -312,9 +312,11 @@ #else #define ASSERT_SORTED(TABLE) \ { static bool TABLE##Checked = false; \ - if (!TABLE##Checked) \ + if (!TABLE##Checked) { \ assert(TableIsSorted(TABLE, ARRAY_SIZE(TABLE)) && \ "All lookup tables must be sorted for efficient access!"); \ + TABLE##Checked = true; \ + } \ } #endif From evan.cheng at apple.com Wed Jul 19 16:29:42 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 19 Jul 2006 16:29:42 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/README.txt Message-ID: <200607192129.QAA03654@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: README.txt updated: 1.119 -> 1.120 --- Log message: New entry. --- Diffs of the changes: (+25 -0) README.txt | 25 +++++++++++++++++++++++++ 1 files changed, 25 insertions(+) Index: llvm/lib/Target/X86/README.txt diff -u llvm/lib/Target/X86/README.txt:1.119 llvm/lib/Target/X86/README.txt:1.120 --- llvm/lib/Target/X86/README.txt:1.119 Wed Jul 19 01:06:24 2006 +++ llvm/lib/Target/X86/README.txt Wed Jul 19 16:29:30 2006 @@ -709,3 +709,28 @@ JIT should resolve __cxa_atexit on Mac OS X. In a non-jit environment, the symbol is a dynamically resolved by the linker. + +//===---------------------------------------------------------------------===// + +u32 to float conversion improvement: + +float uint32_2_float( unsigned u ) { + float fl = (int) (u & 0xffff); + float fh = (int) (u >> 16); + fh *= 0x1.0p16f; + return fh + fl; +} + +00000000 subl $0x04,%esp +00000003 movl 0x08(%esp,1),%eax +00000007 movl %eax,%ecx +00000009 shrl $0x10,%ecx +0000000c cvtsi2ss %ecx,%xmm0 +00000010 andl $0x0000ffff,%eax +00000015 cvtsi2ss %eax,%xmm1 +00000019 mulss 0x00000078,%xmm0 +00000021 addss %xmm1,%xmm0 +00000025 movss %xmm0,(%esp,1) +0000002a flds (%esp,1) +0000002d addl $0x04,%esp +00000030 ret From pjenkins at apple.com Wed Jul 19 20:23:56 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Wed, 19 Jul 2006 20:23:56 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607200123.UAA05092@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.19 -> 1.20 --- Log message: Clarified the createnight function. If anything is going to fail its that function. Wrote a Difference function that gets the difference between a list of two tests. Added differences from previous day in the nightly test results email. --- Diffs of the changes: (+158 -34) NightlyTestAccept.cgi | 192 +++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 158 insertions(+), 34 deletions(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.19 nightlytest-serverside/NightlyTestAccept.cgi:1.20 --- nightlytest-serverside/NightlyTestAccept.cgi:1.19 Wed Jul 19 12:54:32 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Wed Jul 19 20:23:44 2006 @@ -4,31 +4,31 @@ # from the llvm NightlyTest.pl script. It is just a CGI script that takes input by the # POST method. After this it parses the information and places it into the database. # -###################################################################################################### +################################################################################ use CGI qw(:standard); use DBI; -###################################################################################################### +################################################################################ # # Important variables # -###################################################################################################### +################################################################################ my $DATABASE="nightlytestresults"; my $LOGINNAME="llvm"; my $PASSWORD="ll2002vm"; -###################################################################################################### +################################################################################ # # Connecting to the database # -###################################################################################################### +################################################################################ my $dbh = DBI->connect("DBI:mysql:$DATABASE",$LOGINNAME,$PASSWORD); -###################################################################################################### +################################################################################ # # Some methods to help the process # -###################################################################################################### +################################################################################ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub ChangeDir { # directory, logical name @@ -95,6 +95,34 @@ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # +# Difference: returns a list of lines that are in the first value but not +# in the second +# +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +sub Difference{ + $one = $_[0]; + $two = $_[1]; + + @ONE = split "\n", $one; + @TWO = split "\n", $two; + + my %hash_of_diff=(); + foreach $x (@TWO){ + $hash_of_diff{$x}=1; + } + + $result=""; + foreach $x (@ONE){ + if($hash_of_diff{$x}!=1){ + $result.="$x\n"; + } + } + + chomp $result; + return $result; +} +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# # mysql> describe machine; # +-----------+----------+------+-----+---------+----------------+ # | Field | Type | Null | Key | Default | Extra | @@ -196,21 +224,95 @@ sub CreateNight{ - for($x=0; $x<20; $x++){ + for($x=0; $x<@_; $x++){ $_[$x]="" unless $_[$x]; } - + +$y=0; +$machine_id=$_[$y]; +$y++; +$db_date=$_[$y]; +$y++; +$buildstatus=$_[$y]; +$y++; +$configtime_cpu=$_[$y]; +$y++; +$configtime_wall=$_[$y]; +$y++; +$cvscheckouttime_cpu=$_[$y]; +$y++; +$cvscheckouttime_wall=$_[$y]; +$y++; +$buildtime_cpu=$_[$y]; +$y++; +$buildtime_wall=$_[$y]; +$y++; +$dejagnutime_cpu=$_[$y]; +$y++; +$dejagnutime_wall=$_[$y]; +$y++; +$warnings=$_[$y]; +$y++; +$warnings_added=$_[$y]; +$y++; +$warnings_removed=$_[$y]; +$y++; +$dejagnu_exp_passes=$_[$y]; +$y++; +$dejagnu_unexp_failures=$_[$y]; +$y++; +$dejagnu_exp_failures=$_[$y]; +$y++; +$all_tests=$_[$y]; +$y++; +$passing_tests=$_[$y]; +$y++; +$unexpfail_tests=$_[$y]; +$y++; +$expfail_tests=$_[$y]; +$y++; +$newly_passing_tests=$_[$y]; +$y++; +$newly_failing_tests=$_[$y]; +$y++; +$new_tests=$_[$y]; +$y++; +$removed_tests=$_[$y]; +$y++; +$cvsaddedfiles=$_[$y]; +$y++; +$cvsremovedfiles=$_[$y]; +$y++; +$cvsmodifiedfiles=$_[$y]; +$y++; +$cvsusercommitlist=$_[$y]; +$y++; +$cvsuserupdatelist=$_[$y]; +$y++; + + + my $d = $dbh->prepare("insert into night (machine, added, buildstatus, configuretime_cpu, configuretime_wall,". " getcvstime_cpu, getcvstime_wall, buildtime_cpu,". " buildtime_wall, dejagnutime_cpu, dejagnutime_wall, warnings,". " warnings_added, warnings_removed, teststats_exppass,". - " teststats_unexpfail, teststats_expfail, unexpfail_tests,". + " teststats_unexpfail, teststats_expfail, all_tests,". + " passing_tests, unexpfail_tests, expfail_tests". " newly_passing_tests, newly_failing_tests, new_tests,". " removed_tests, cvs_added, cvs_removed, cvs_modified,". - " cvs_usersadd, cvs_usersco) values (\"$_[0]\",\"$_[1]\",\"$_[2]\",\"$_[3]\",\"$_[4]\"". - ",\"$_[5]\",\"$_[6]\",\"$_[7]\",\"$_[8]\",\"$_[9]\",\"$_[10]\",\"$_[11]\",\"$_[12]\",\"$_[13]\"". - ",\"$_[14]\",\"$_[15]\",\"$_[16]\",\"$_[17]\",\"$_[18]\",\"$_[19]\",\"$_[20]\",\"$_[21]\",\"$_[22]\"". - ",\"$_[23]\",\"$_[24]\",\"$_[25]\",\"$_[26]\")"); + " cvs_usersadd, cvs_usersco) values (". + "\"$machine_id\", \"$db_date\", \"$buildstatus\",". + "\"$configtime_cpu\", \"$configtime_wall\", \"$cvscheckouttime_cpu\",". + "\"$cvscheckouttime_wall\", \"$buildtime_cpu\", \"$buildtime_wall\",". + "\"$dejagnutime_cpu\", \"$dejagnutime_wall\", \"$warnings\",". + "\"$warnings_added\", \"$warnings_removed\",". + "\"$dejagnu_exp_passes\", \"$dejagnu_unexp_failures\", \"$dejagnu_exp_failures\",". + "\"$all_tests\", \"$passing_tests\", \"$unexpfail_tests\",". + "\"$expfail_tests\", \"$newly_passing_tests\", \"$newly_failing_tests\",". + "\"$new_tests\", \"$removed_tests\",". + "\"$cvsaddedfiles\", \"$cvsremovedfiles\", \"$cvsmodifiedfiles\",". + "\"$cvsusercommitlist\", \"$cvsuserupdatelist\")"); + $d->execute; my $e = $dbh->prepare("SELECT id FROM night where machine=$_[0] and added=\"$_[1]\""); @@ -287,11 +389,11 @@ } -###################################################################################################### +################################################################################ # # Setting up variables # -###################################################################################################### +################################################################################ my $spliton ="\n"; my $machine_data=param('machine_data'); @@ -367,11 +469,11 @@ my $cvs_file_count = param('cvs_dir_count'); -###################################################################################################### +################################################################################ # # Extracting the machine information # -###################################################################################################### +################################################################################ if($MACHINE_DATA[0]){ $MACHINE_DATA[0] =~ m/uname\:\s*(.+)/; $uname = $1; chomp($uname)} if($MACHINE_DATA[1]){ $MACHINE_DATA[1] =~ m/hardware\:\s*(.+)/; $hardware=$1; chomp($hardware)} if($MACHINE_DATA[2]){ $MACHINE_DATA[2] =~ m/os\:\s*(.+)/; $os=$1; chomp($os)} @@ -379,18 +481,17 @@ if($MACHINE_DATA[4]){ $MACHINE_DATA[4] =~ m/date\:\s*(.+)/; $date=$1; chomp($date)} if($MACHINE_DATA[5]){ $MACHINE_DATA[5] =~ m/time\:\s*(.+)/; $time=$1; chomp($time)} -###################################################################################################### +################################################################################ # # Adding lines of code # -###################################################################################################### - +################################################################################ -###################################################################################################### +################################################################################ # # Extracting the dejagnu test numbers # -###################################################################################################### +################################################################################ print "content-type: text/text\r\n\r\n"; $dejagnutests_log =~ m/\# of expected passes\s*([0-9]+)/; @@ -400,11 +501,11 @@ $dejagnutests_log =~ m/\# of expected failures\s*([0-9]+)/; $dejagnu_exp_failures=$1; -###################################################################################################### +################################################################################ # # Processing Program Test Table Logs # -###################################################################################################### +################################################################################ $linebreak="OA
    "; $seperator=","; @@ -444,11 +545,11 @@ $external_processed{$temp_outcome[0]}=$outcome; } -###################################################################################################### +################################################################################ # # creating the response # -###################################################################################################### +################################################################################ print "content-type: text/text\r\n\r\n"; if (!DoesMachineExist $uname,$hardware,$os,$name,$nickname,$gcc_version){ @@ -456,6 +557,25 @@ } $machine_id = GetMachineId $uname, $hardware, $os, $name, $nickname, $gcc_version; +################################################################################ +# +# Creating test lists +# +################################################################################ +$machine_id = GetMachineId $uname, $hardware, $os, $name, $nickname, $gcc_version; +my $d = $dbh->prepare("select * from night where machine = $machine_id ORDER BY added DESC"); +$d->execute; +my $row=$d->fetchrow_hashref; +$yesterdays_tests = $row->{'all_tests'}; +$yesterdays_passes = $row->{'passing_tests'}; +$yesterdays_fails = $row->{'unexpfail_tests'}; +$yesterdays_xfails = $row->{'expfail_tests'}; +$newly_passing_tests = Difference $passing_tests, $yesterdays_passes; +$newly_failing_tests = Difference $expfail_tests."\n".$unexpfail_tests, + $yesterdays_xfails."\n".$yesterdays_fails; +$new_tests = Difference $all_tests, $yesterdays_tests; +$removed_tests = Difference $yesterdays_tests, $all_tests; + $db_date = $date." ".$time; $night_id= CreateNight $machine_id, $db_date, $buildstatus, $configtime_cpu, $configtime_wall, $cvscheckouttime_cpu, @@ -463,7 +583,8 @@ $dejagnutime_cpu, $dejagnutime_wall, $warnings, $warnings_added, $warnings_removed, $dejagnu_exp_passes, $dejagnu_unexp_failures, $dejagnu_exp_failures, #expected pass, unexp fails, exp fails - $unexpfail_tests, $newly_passing_tests, $newly_failing_tests, + $all_tests, $passing_tests, $unexpfail_tests, + $expfail_tests, $newly_passing_tests, $newly_failing_tests, $new_tests, $removed_tests, $cvsaddedfiles, $cvsremovedfiles, $cvsmodifiedfiles, $cvsusercommitlist, $cvsuserupdatelist; @@ -489,27 +610,30 @@ print "DB date : $db_date\n"; print "Machine $machine_id now has ids [@nights]{$length} associated with it in the database\n"; -###################################################################################################### +################################################################################ # # Sending email to nightly test email archive # -###################################################################################################### +################################################################################ $link_to_page="http://llvm.org/nightlytest/machine.php?machine=$machine_id"; -$email = "$link_to_page"; +$email = "$link_to_page\n"; $email .= "Name: $name\n"; $email .= "Nickname: $nickname\n"; $email .= "Buildstatus: $buildstatus\n"; -$email .= "\nUnexpected Failures:\n$unexpfail_tests\n"; +$email .= "\nNew Test Passes:\n$newly_passing_tests\n"; +$email .= "\nNew Test Failures:\n$newly_failing_tests\n"; +$email .= "\nAdded Tests:\n$new_tests\n"; +$email .= "\nRemoved Tests\n$removed_tests\n"; $email_addr = "llvm-testresults\@cs.uiuc.edu"; `echo "$email" | mail -s '$nickname $hardware nightly tester results' $email_addr`; -###################################################################################################### +################################################################################ # # writing logs to directory # -###################################################################################################### +################################################################################ $curr=`pwd`; chomp($curr); From lattner at cs.uiuc.edu Thu Jul 20 11:44:48 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 20 Jul 2006 11:44:48 -0500 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Makefile Message-ID: <200607201644.LAA25504@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Makefile updated: 1.16 -> 1.17 --- Log message: Fix PR835: http://llvm.org/PR835 so that touching tblgen in a way that doesn't affect intrinsic generation does not rebuild files that just use intrinsic info. --- Diffs of the changes: (+5 -2) Makefile | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) Index: llvm/lib/VMCore/Makefile diff -u llvm/lib/VMCore/Makefile:1.16 llvm/lib/VMCore/Makefile:1.17 --- llvm/lib/VMCore/Makefile:1.16 Wed May 31 20:30:26 2006 +++ llvm/lib/VMCore/Makefile Thu Jul 20 11:44:21 2006 @@ -19,10 +19,13 @@ INTRINSICTD := $(PROJ_SRC_ROOT)/include/llvm/Intrinsics.td INTRINSICTDS := $(wildcard $(PROJ_SRC_ROOT)/include/llvm/Intrinsics*.td) -$(GENFILE): $(INTRINSICTDS) $(TBLGEN) - $(Echo) Building Intrinsics.gen from Intrinsics.td +$(ObjDir)/Intrinsics.gen.tmp: $(INTRINSICTDS) $(TBLGEN) + $(Echo) Building Intrinsics.gen.tmp from Intrinsics.td $(Verb) $(TableGen) $(INTRINSICTD) -o $@ -gen-intrinsic +$(GENFILE): $(ObjDir)/Intrinsics.gen.tmp + $(Verb) $(CMP) -s $@ $< || $(CP) $< $@ + install-local:: $(GENFILE) $(Echo) Installing $(PROJ_includedir)/llvm/Intrinsics.gen $(Verb) $(DataInstall) $(GENFILE) $(PROJ_includedir)/llvm/Intrinsics.gen From pjenkins at apple.com Thu Jul 20 11:54:55 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Thu, 20 Jul 2006 11:54:55 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607201654.LAA25633@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.16 -> 1.17 --- Log message: Fixed a problem that caused the script to abort right before it sent out the information --- Diffs of the changes: (+1 -1) NewNightlyTest.pl | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.16 llvm/utils/NewNightlyTest.pl:1.17 --- llvm/utils/NewNightlyTest.pl:1.16 Wed Jul 19 12:52:51 2006 +++ llvm/utils/NewNightlyTest.pl Thu Jul 20 11:54:43 2006 @@ -979,7 +979,7 @@ @DEJAGNULOG_FULL = ReadFile "$DejagnuTestsLog"; $dejagnulog_full = join("\n", @DEJAGNULOG_FULL); -newmy $gcc_version_long=""; +my $gcc_version_long=""; if($GCCPATH ne ""){ $gcc_version_long = `$GCCPATH/gcc --version`; print "$GCCPATH/gcc --version\n"; From alenhar2 at cs.uiuc.edu Thu Jul 20 12:28:12 2006 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 20 Jul 2006 12:28:12 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/Makefile Message-ID: <200607201728.MAA16472@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: Makefile updated: 1.27 -> 1.28 --- Log message: Fix linking on Alpha --- Diffs of the changes: (+1 -0) Makefile | 1 + 1 files changed, 1 insertion(+) Index: llvm/lib/CodeGen/Makefile diff -u llvm/lib/CodeGen/Makefile:1.27 llvm/lib/CodeGen/Makefile:1.28 --- llvm/lib/CodeGen/Makefile:1.27 Thu Jun 1 01:12:21 2006 +++ llvm/lib/CodeGen/Makefile Thu Jul 20 12:27:58 2006 @@ -10,6 +10,7 @@ LEVEL = ../.. LIBRARYNAME = LLVMCodeGen PARALLEL_DIRS = SelectionDAG +BUILD_ARCHIVE = 1 include $(LEVEL)/Makefile.common From alenhar2 at cs.uiuc.edu Thu Jul 20 12:28:12 2006 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 20 Jul 2006 12:28:12 -0500 Subject: [llvm-commits] CVS: llvm/Makefile.rules Message-ID: <200607201728.MAA16480@zion.cs.uiuc.edu> Changes in directory llvm: Makefile.rules updated: 1.385 -> 1.386 --- Log message: Fix linking on Alpha --- Diffs of the changes: (+3 -3) Makefile.rules | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/Makefile.rules diff -u llvm/Makefile.rules:1.385 llvm/Makefile.rules:1.386 --- llvm/Makefile.rules:1.385 Tue Jul 11 13:33:50 2006 +++ llvm/Makefile.rules Thu Jul 20 12:27:58 2006 @@ -253,8 +253,8 @@ #Make Floating point ieee complient on alpha ifeq ($(ARCH),Alpha) - CXX.Flags += -mieee - CPP.BaseFlags += -mieee + CXX.Flags += -mieee -fPIC + CPP.BaseFlags += -mieee -fPIC endif #-------------------------------------------------------------------- @@ -609,7 +609,7 @@ Link += -dlopen self # Generic JIT libraries -JIT_LIBS := LLVMInterpreter LLVMJIT LLVMCodeGen LLVMExecutionEngine +JIT_LIBS := LLVMInterpreter LLVMJIT LLVMCodeGen.a LLVMExecutionEngine # You can enable the X86 JIT on a non-X86 host by setting the flag # ENABLE_X86_JIT on the make command line. If not, it will still be From alenhar2 at cs.uiuc.edu Thu Jul 20 12:28:12 2006 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 20 Jul 2006 12:28:12 -0500 Subject: [llvm-commits] CVS: llvm/tools/llc/Makefile Message-ID: <200607201728.MAA16476@zion.cs.uiuc.edu> Changes in directory llvm/tools/llc: Makefile updated: 1.84 -> 1.85 --- Log message: Fix linking on Alpha --- Diffs of the changes: (+1 -1) Makefile | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/tools/llc/Makefile diff -u llvm/tools/llc/Makefile:1.84 llvm/tools/llc/Makefile:1.85 --- llvm/tools/llc/Makefile:1.84 Thu Jul 6 19:46:18 2006 +++ llvm/tools/llc/Makefile Thu Jul 20 12:27:58 2006 @@ -56,7 +56,7 @@ USEDLIBS += \ LLVMSelectionDAG \ - LLVMCodeGen \ + LLVMCodeGen.a \ LLVMTarget.a \ LLVMipa.a \ LLVMTransforms.a \ From alenhar2 at cs.uiuc.edu Thu Jul 20 12:28:51 2006 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 20 Jul 2006 12:28:51 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp ScheduleDAGList.cpp Message-ID: <200607201728.MAA16686@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: DAGCombiner.cpp updated: 1.174 -> 1.175 ScheduleDAGList.cpp updated: 1.61 -> 1.62 --- Log message: Reduce number of exported symbols --- Diffs of the changes: (+3 -3) DAGCombiner.cpp | 2 +- ScheduleDAGList.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.174 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.175 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.174 Wed Jun 28 16:58:30 2006 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Thu Jul 20 12:28:38 2006 @@ -42,7 +42,7 @@ using namespace llvm; namespace { - Statistic<> NodesCombined ("dagcombiner", "Number of dag nodes combined"); + static Statistic<> NodesCombined ("dagcombiner", "Number of dag nodes combined"); class VISIBILITY_HIDDEN DAGCombiner { SelectionDAG &DAG; Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp:1.61 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp:1.62 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp:1.61 Wed Jun 28 17:17:39 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp Thu Jul 20 12:28:38 2006 @@ -34,8 +34,8 @@ using namespace llvm; namespace { - Statistic<> NumNoops ("scheduler", "Number of noops inserted"); - Statistic<> NumStalls("scheduler", "Number of pipeline stalls"); + static Statistic<> NumNoops ("scheduler", "Number of noops inserted"); + static Statistic<> NumStalls("scheduler", "Number of pipeline stalls"); } namespace { From alenhar2 at cs.uiuc.edu Thu Jul 20 12:28:52 2006 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 20 Jul 2006 12:28:52 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp PHIElimination.cpp Passes.cpp RegAllocLinearScan.cpp RegAllocLocal.cpp RegAllocSimple.cpp TwoAddressInstructionPass.cpp VirtRegMap.cpp Message-ID: <200607201728.MAA16714@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: LiveIntervalAnalysis.cpp updated: 1.161 -> 1.162 PHIElimination.cpp updated: 1.42 -> 1.43 Passes.cpp updated: 1.16 -> 1.17 RegAllocLinearScan.cpp updated: 1.124 -> 1.125 RegAllocLocal.cpp updated: 1.80 -> 1.81 RegAllocSimple.cpp updated: 1.68 -> 1.69 TwoAddressInstructionPass.cpp updated: 1.35 -> 1.36 VirtRegMap.cpp updated: 1.67 -> 1.68 --- Log message: Reduce number of exported symbols --- Diffs of the changes: (+28 -27) LiveIntervalAnalysis.cpp | 12 ++++++------ PHIElimination.cpp | 4 ++-- Passes.cpp | 2 +- RegAllocLinearScan.cpp | 5 +++-- RegAllocLocal.cpp | 8 ++++---- RegAllocSimple.cpp | 4 ++-- TwoAddressInstructionPass.cpp | 6 +++--- VirtRegMap.cpp | 14 +++++++------- 8 files changed, 28 insertions(+), 27 deletions(-) Index: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp diff -u llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.161 llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.162 --- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.161 Wed May 24 12:04:04 2006 +++ llvm/lib/CodeGen/LiveIntervalAnalysis.cpp Thu Jul 20 12:28:38 2006 @@ -40,22 +40,22 @@ namespace { RegisterAnalysis X("liveintervals", "Live Interval Analysis"); - Statistic<> numIntervals + static Statistic<> numIntervals ("liveintervals", "Number of original intervals"); - Statistic<> numIntervalsAfter + static Statistic<> numIntervalsAfter ("liveintervals", "Number of intervals after coalescing"); - Statistic<> numJoins + static Statistic<> numJoins ("liveintervals", "Number of interval joins performed"); - Statistic<> numPeep + static Statistic<> numPeep ("liveintervals", "Number of identity moves eliminated after coalescing"); - Statistic<> numFolded + static Statistic<> numFolded ("liveintervals", "Number of loads/stores folded into instructions"); - cl::opt + static cl::opt EnableJoining("join-liveintervals", cl::desc("Join compatible live intervals"), cl::init(true)); Index: llvm/lib/CodeGen/PHIElimination.cpp diff -u llvm/lib/CodeGen/PHIElimination.cpp:1.42 llvm/lib/CodeGen/PHIElimination.cpp:1.43 --- llvm/lib/CodeGen/PHIElimination.cpp:1.42 Wed Jun 28 18:17:23 2006 +++ llvm/lib/CodeGen/PHIElimination.cpp Thu Jul 20 12:28:38 2006 @@ -29,8 +29,8 @@ using namespace llvm; namespace { - Statistic<> NumAtomic("phielim", "Number of atomic phis lowered"); - Statistic<> NumSimple("phielim", "Number of simple phis lowered"); + static Statistic<> NumAtomic("phielim", "Number of atomic phis lowered"); + static Statistic<> NumSimple("phielim", "Number of simple phis lowered"); struct VISIBILITY_HIDDEN PNE : public MachineFunctionPass { bool runOnMachineFunction(MachineFunction &Fn) { Index: llvm/lib/CodeGen/Passes.cpp diff -u llvm/lib/CodeGen/Passes.cpp:1.16 llvm/lib/CodeGen/Passes.cpp:1.17 --- llvm/lib/CodeGen/Passes.cpp:1.16 Sun Oct 23 23:14:30 2005 +++ llvm/lib/CodeGen/Passes.cpp Thu Jul 20 12:28:38 2006 @@ -20,7 +20,7 @@ namespace { enum RegAllocName { simple, local, linearscan }; - cl::opt + static cl::opt RegAlloc( "regalloc", cl::desc("Register allocator to use: (default = linearscan)"), Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.124 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.125 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.124 Wed Jun 28 17:17:39 2006 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Thu Jul 20 12:28:38 2006 @@ -37,9 +37,10 @@ namespace { - Statistic efficiency + static Statistic efficiency ("regalloc", "Ratio of intervals processed over total intervals"); - Statistic<> NumBacktracks("regalloc", "Number of times we had to backtrack"); + static Statistic<> NumBacktracks + ("regalloc", "Number of times we had to backtrack"); static unsigned numIterations = 0; static unsigned numIntervals = 0; Index: llvm/lib/CodeGen/RegAllocLocal.cpp diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.80 llvm/lib/CodeGen/RegAllocLocal.cpp:1.81 --- llvm/lib/CodeGen/RegAllocLocal.cpp:1.80 Wed Jun 28 18:17:23 2006 +++ llvm/lib/CodeGen/RegAllocLocal.cpp Thu Jul 20 12:28:38 2006 @@ -31,10 +31,10 @@ using namespace llvm; namespace { - Statistic<> NumStores("ra-local", "Number of stores added"); - Statistic<> NumLoads ("ra-local", "Number of loads added"); - Statistic<> NumFolded("ra-local", "Number of loads/stores folded into " - "instructions"); + static Statistic<> NumStores("ra-local", "Number of stores added"); + static Statistic<> NumLoads ("ra-local", "Number of loads added"); + static Statistic<> NumFolded("ra-local", "Number of loads/stores folded into " + "instructions"); class VISIBILITY_HIDDEN RA : public MachineFunctionPass { const TargetMachine *TM; MachineFunction *MF; Index: llvm/lib/CodeGen/RegAllocSimple.cpp diff -u llvm/lib/CodeGen/RegAllocSimple.cpp:1.68 llvm/lib/CodeGen/RegAllocSimple.cpp:1.69 --- llvm/lib/CodeGen/RegAllocSimple.cpp:1.68 Wed Jun 28 17:17:39 2006 +++ llvm/lib/CodeGen/RegAllocSimple.cpp Thu Jul 20 12:28:38 2006 @@ -30,8 +30,8 @@ using namespace llvm; namespace { - Statistic<> NumStores("ra-simple", "Number of stores added"); - Statistic<> NumLoads ("ra-simple", "Number of loads added"); + static Statistic<> NumStores("ra-simple", "Number of stores added"); + static Statistic<> NumLoads ("ra-simple", "Number of loads added"); class VISIBILITY_HIDDEN RegAllocSimple : public MachineFunctionPass { MachineFunction *MF; Index: llvm/lib/CodeGen/TwoAddressInstructionPass.cpp diff -u llvm/lib/CodeGen/TwoAddressInstructionPass.cpp:1.35 llvm/lib/CodeGen/TwoAddressInstructionPass.cpp:1.36 --- llvm/lib/CodeGen/TwoAddressInstructionPass.cpp:1.35 Wed Jun 28 17:17:39 2006 +++ llvm/lib/CodeGen/TwoAddressInstructionPass.cpp Thu Jul 20 12:28:38 2006 @@ -45,11 +45,11 @@ using namespace llvm; namespace { - Statistic<> NumTwoAddressInstrs("twoaddressinstruction", + static Statistic<> NumTwoAddressInstrs("twoaddressinstruction", "Number of two-address instructions"); - Statistic<> NumCommuted("twoaddressinstruction", + static Statistic<> NumCommuted("twoaddressinstruction", "Number of instructions commuted to coalesce"); - Statistic<> NumConvertedTo3Addr("twoaddressinstruction", + static Statistic<> NumConvertedTo3Addr("twoaddressinstruction", "Number of instructions promoted to 3-address"); struct VISIBILITY_HIDDEN TwoAddressInstructionPass Index: llvm/lib/CodeGen/VirtRegMap.cpp diff -u llvm/lib/CodeGen/VirtRegMap.cpp:1.67 llvm/lib/CodeGen/VirtRegMap.cpp:1.68 --- llvm/lib/CodeGen/VirtRegMap.cpp:1.67 Wed Jun 28 17:17:39 2006 +++ llvm/lib/CodeGen/VirtRegMap.cpp Thu Jul 20 12:28:38 2006 @@ -34,16 +34,16 @@ using namespace llvm; namespace { - Statistic<> NumSpills("spiller", "Number of register spills"); - Statistic<> NumStores("spiller", "Number of stores added"); - Statistic<> NumLoads ("spiller", "Number of loads added"); - Statistic<> NumReused("spiller", "Number of values reused"); - Statistic<> NumDSE ("spiller", "Number of dead stores elided"); - Statistic<> NumDCE ("spiller", "Number of copies elided"); + static Statistic<> NumSpills("spiller", "Number of register spills"); + static Statistic<> NumStores("spiller", "Number of stores added"); + static Statistic<> NumLoads ("spiller", "Number of loads added"); + static Statistic<> NumReused("spiller", "Number of values reused"); + static Statistic<> NumDSE ("spiller", "Number of dead stores elided"); + static Statistic<> NumDCE ("spiller", "Number of copies elided"); enum SpillerName { simple, local }; - cl::opt + static cl::opt SpillerOpt("spiller", cl::desc("Spiller to use: (default: local)"), cl::Prefix, From alenhar2 at cs.uiuc.edu Thu Jul 20 12:43:41 2006 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 20 Jul 2006 12:43:41 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Message-ID: <200607201743.MAA22500@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: DAGCombiner.cpp updated: 1.175 -> 1.176 --- Log message: 80 cols --- Diffs of the changes: (+2 -1) DAGCombiner.cpp | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.175 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.176 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.175 Thu Jul 20 12:28:38 2006 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Thu Jul 20 12:43:27 2006 @@ -42,7 +42,8 @@ using namespace llvm; namespace { - static Statistic<> NodesCombined ("dagcombiner", "Number of dag nodes combined"); + static Statistic<> NodesCombined ("dagcombiner", + "Number of dag nodes combined"); class VISIBILITY_HIDDEN DAGCombiner { SelectionDAG &DAG; From alenhar2 at cs.uiuc.edu Thu Jul 20 12:43:41 2006 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 20 Jul 2006 12:43:41 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/RegAllocLocal.cpp Message-ID: <200607201743.MAA22496@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: RegAllocLocal.cpp updated: 1.81 -> 1.82 --- Log message: 80 cols --- Diffs of the changes: (+2 -2) RegAllocLocal.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/RegAllocLocal.cpp diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.81 llvm/lib/CodeGen/RegAllocLocal.cpp:1.82 --- llvm/lib/CodeGen/RegAllocLocal.cpp:1.81 Thu Jul 20 12:28:38 2006 +++ llvm/lib/CodeGen/RegAllocLocal.cpp Thu Jul 20 12:43:27 2006 @@ -33,8 +33,8 @@ namespace { static Statistic<> NumStores("ra-local", "Number of stores added"); static Statistic<> NumLoads ("ra-local", "Number of loads added"); - static Statistic<> NumFolded("ra-local", "Number of loads/stores folded into " - "instructions"); + static Statistic<> NumFolded("ra-local", "Number of loads/stores folded " + "into instructions"); class VISIBILITY_HIDDEN RA : public MachineFunctionPass { const TargetMachine *TM; MachineFunction *MF; From dpatel at apple.com Thu Jul 20 12:48:19 2006 From: dpatel at apple.com (Devang Patel) Date: Thu, 20 Jul 2006 12:48:19 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/IPO/Internalize.cpp Message-ID: <200607201748.MAA24054@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/IPO: Internalize.cpp updated: 1.32 -> 1.33 --- Log message: Add new constructor to accept vector of exported names while creating InternalizePass. --- Diffs of the changes: (+12 -0) Internalize.cpp | 12 ++++++++++++ 1 files changed, 12 insertions(+) Index: llvm/lib/Transforms/IPO/Internalize.cpp diff -u llvm/lib/Transforms/IPO/Internalize.cpp:1.32 llvm/lib/Transforms/IPO/Internalize.cpp:1.33 --- llvm/lib/Transforms/IPO/Internalize.cpp:1.32 Tue Mar 7 14:53:47 2006 +++ llvm/lib/Transforms/IPO/Internalize.cpp Thu Jul 20 12:48:05 2006 @@ -45,6 +45,7 @@ bool DontInternalize; public: InternalizePass(bool InternalizeEverything = true); + InternalizePass(const std::vector & exportList); void LoadFile(const char *Filename); virtual bool runOnModule(Module &M); }; @@ -62,6 +63,13 @@ DontInternalize = true; } +InternalizePass::InternalizePass(const std::vector&exportList) { + for(std::vector::const_iterator itr = exportList.begin(); + itr != exportList.end(); itr++) { + ExternalNames.insert(*itr); + } +} + void InternalizePass::LoadFile(const char *Filename) { // Load the APIFile... std::ifstream In(Filename); @@ -151,3 +159,7 @@ ModulePass *llvm::createInternalizePass(bool InternalizeEverything) { return new InternalizePass(InternalizeEverything); } + +ModulePass *llvm::createInternalizePass(const std::vector &exportList) { + return new InternalizePass(exportList); +} From dpatel at apple.com Thu Jul 20 12:48:19 2006 From: dpatel at apple.com (Devang Patel) Date: Thu, 20 Jul 2006 12:48:19 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Transforms/IPO.h Message-ID: <200607201748.MAA24052@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Transforms: IPO.h updated: 1.45 -> 1.46 --- Log message: Add new constructor to accept vector of exported names while creating InternalizePass. --- Diffs of the changes: (+1 -0) IPO.h | 1 + 1 files changed, 1 insertion(+) Index: llvm/include/llvm/Transforms/IPO.h diff -u llvm/include/llvm/Transforms/IPO.h:1.45 llvm/include/llvm/Transforms/IPO.h:1.46 --- llvm/include/llvm/Transforms/IPO.h:1.45 Mon Apr 10 14:26:09 2006 +++ llvm/include/llvm/Transforms/IPO.h Thu Jul 20 12:48:05 2006 @@ -117,6 +117,7 @@ /// the main function is found, all other globals are marked as internal. /// ModulePass *createInternalizePass(bool InternalizeEverything); +ModulePass *createInternalizePass(const std::vector &exportList); //===----------------------------------------------------------------------===// /// createDeadArgEliminationPass - This pass removes arguments from functions From dpatel at apple.com Thu Jul 20 13:03:52 2006 From: dpatel at apple.com (Devang Patel) Date: Thu, 20 Jul 2006 13:03:52 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/IPO/Internalize.cpp Message-ID: <200607201803.NAA26955@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/IPO: Internalize.cpp updated: 1.33 -> 1.34 --- Log message: Make it fit into 80 cols. --- Diffs of the changes: (+2 -2) Internalize.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/Transforms/IPO/Internalize.cpp diff -u llvm/lib/Transforms/IPO/Internalize.cpp:1.33 llvm/lib/Transforms/IPO/Internalize.cpp:1.34 --- llvm/lib/Transforms/IPO/Internalize.cpp:1.33 Thu Jul 20 12:48:05 2006 +++ llvm/lib/Transforms/IPO/Internalize.cpp Thu Jul 20 13:03:39 2006 @@ -160,6 +160,6 @@ return new InternalizePass(InternalizeEverything); } -ModulePass *llvm::createInternalizePass(const std::vector &exportList) { - return new InternalizePass(exportList); +ModulePass *llvm::createInternalizePass(const std::vector &el) { + return new InternalizePass(el); } From lattner at cs.uiuc.edu Thu Jul 20 14:02:34 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 20 Jul 2006 14:02:34 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200607201902.OAA15451@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.258 -> 1.259 --- Log message: Mems can be in the output list also. This is the second half of a fix for PR833: http://llvm.org/PR833 --- Diffs of the changes: (+2 -1) SelectionDAGISel.cpp | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.258 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.259 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.258 Wed Jun 28 18:17:23 2006 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Thu Jul 20 14:02:21 2006 @@ -2167,7 +2167,8 @@ // Advance to the next operand. unsigned NumOps = cast(AsmNodeOperands[CurOp])->getValue(); - assert((NumOps & 7) == 2 /*REGDEF*/ && + assert(((NumOps & 7) == 2 /*REGDEF*/ || + (NumOps & 7) == 4 /*MEM*/) && "Skipped past definitions?"); CurOp += (NumOps>>3)+1; } From lattner at cs.uiuc.edu Thu Jul 20 14:04:48 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 20 Jul 2006 14:04:48 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/X86/2006-07-20-InlineAsm.ll Message-ID: <200607201904.OAA15784@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/X86: 2006-07-20-InlineAsm.ll added (r1.1) --- Log message: New testcase for PR833: http://llvm.org/PR833 --- Diffs of the changes: (+24 -0) 2006-07-20-InlineAsm.ll | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+) Index: llvm/test/Regression/CodeGen/X86/2006-07-20-InlineAsm.ll diff -c /dev/null llvm/test/Regression/CodeGen/X86/2006-07-20-InlineAsm.ll:1.1 *** /dev/null Thu Jul 20 14:04:46 2006 --- llvm/test/Regression/CodeGen/X86/2006-07-20-InlineAsm.ll Thu Jul 20 14:04:36 2006 *************** *** 0 **** --- 1,24 ---- + ; RUN: llvm-as < %s | llc -march=x86 + ; PR833 + + %G = weak global int 0 ; [#uses=3] + + implementation ; Functions: + + int %foo(int %X) { + entry: + %X_addr = alloca int ; [#uses=3] + store int %X, int* %X_addr + call void asm sideeffect "xchg{l} {$0,$1|$1,$0}", "==m,==r,m,1,~{dirflag},~{fpsr},~{flags}"( int* %G, int* %X_addr, int* %G, int %X ) + %tmp1 = load int* %X_addr ; [#uses=1] + ret int %tmp1 + } + + int %foo2(int %X) { + entry: + %X_addr = alloca int ; [#uses=3] + store int %X, int* %X_addr + call void asm sideeffect "xchg{l} {$0,$1|$1,$0}", "==m,==r,1,~{dirflag},~{fpsr},~{flags}"( int* %G, int* %X_addr, int %X ) + %tmp1 = load int* %X_addr ; [#uses=1] + ret int %tmp1 + } From lattner at cs.uiuc.edu Thu Jul 20 14:06:28 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 20 Jul 2006 14:06:28 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LoopUnroll.cpp Message-ID: <200607201906.OAA16209@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LoopUnroll.cpp updated: 1.22 -> 1.23 --- Log message: Minor comment tweaks --- Diffs of the changes: (+5 -6) LoopUnroll.cpp | 11 +++++------ 1 files changed, 5 insertions(+), 6 deletions(-) Index: llvm/lib/Transforms/Scalar/LoopUnroll.cpp diff -u llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.22 llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.23 --- llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.22 Wed Jul 19 00:48:45 2006 +++ llvm/lib/Transforms/Scalar/LoopUnroll.cpp Thu Jul 20 14:06:16 2006 @@ -266,18 +266,17 @@ else delete LI->removeLoop(std::find(LI->begin(), LI->end(), L)); - - // FIXME: Should update dominator analyses - - // Remove LCSSA Phis from the exit block + // Remove single-entry Phis from the exit block. for (BasicBlock::iterator ExitInstr = LoopExit->begin(); PHINode* PN = dyn_cast(ExitInstr); ++ExitInstr) { assert(PN->getNumIncomingValues() == 1 - && "Block should only have one pred, so Phi's must be LCSSA"); + && "Block should only have one pred, so Phi's must be single entry"); PN->replaceAllUsesWith(PN->getOperand(0)); PN->eraseFromParent(); } - + + // FIXME: Should update dominator analyses + // Now that everything is up-to-date that will be, we fold the loop block into // the preheader and exit block, updating our analyses as we go. LoopExit->getInstList().splice(LoopExit->begin(), BB->getInstList(), From lattner at cs.uiuc.edu Thu Jul 20 14:08:40 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 20 Jul 2006 14:08:40 -0500 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Makefile Message-ID: <200607201908.OAA16581@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Makefile updated: 1.17 -> 1.18 --- Log message: Fix a race condition in the makefile andrew reported --- Diffs of the changes: (+1 -1) Makefile | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/VMCore/Makefile diff -u llvm/lib/VMCore/Makefile:1.17 llvm/lib/VMCore/Makefile:1.18 --- llvm/lib/VMCore/Makefile:1.17 Thu Jul 20 11:44:21 2006 +++ llvm/lib/VMCore/Makefile Thu Jul 20 14:08:27 2006 @@ -19,7 +19,7 @@ INTRINSICTD := $(PROJ_SRC_ROOT)/include/llvm/Intrinsics.td INTRINSICTDS := $(wildcard $(PROJ_SRC_ROOT)/include/llvm/Intrinsics*.td) -$(ObjDir)/Intrinsics.gen.tmp: $(INTRINSICTDS) $(TBLGEN) +$(ObjDir)/Intrinsics.gen.tmp: $(ObjDir)/.dir $(INTRINSICTDS) $(TBLGEN) $(Echo) Building Intrinsics.gen.tmp from Intrinsics.td $(Verb) $(TableGen) $(INTRINSICTD) -o $@ -gen-intrinsic From evan.cheng at apple.com Thu Jul 20 16:37:51 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 20 Jul 2006 16:37:51 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86InstrInfo.td Message-ID: <200607202137.QAA30640@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86InstrInfo.td updated: 1.280 -> 1.281 --- Log message: Clean up. --- Diffs of the changes: (+3 -3) X86InstrInfo.td | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/lib/Target/X86/X86InstrInfo.td diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.280 llvm/lib/Target/X86/X86InstrInfo.td:1.281 --- llvm/lib/Target/X86/X86InstrInfo.td:1.280 Tue Jul 18 19:27:29 2006 +++ llvm/lib/Target/X86/X86InstrInfo.td Thu Jul 20 16:37:39 2006 @@ -1404,11 +1404,11 @@ // Shift left by one. Not used because (add x, x) is slightly cheaper. def SHL8r1 : I<0xD0, MRM4r, (ops GR8 :$dst, GR8 :$src1), - "shl{b} {$dst|$dst}", []>; + "shl{b} $dst", []>; def SHL16r1 : I<0xD1, MRM4r, (ops GR16:$dst, GR16:$src1), - "shl{w} {$dst|$dst}", []>, OpSize; + "shl{w} $dst", []>, OpSize; def SHL32r1 : I<0xD1, MRM4r, (ops GR32:$dst, GR32:$src1), - "shl{l} {$dst|$dst}", []>; + "shl{l} $dst", []>; let isTwoAddress = 0 in { def SHL8mCL : I<0xD2, MRM4m, (ops i8mem :$dst), From pjenkins at apple.com Thu Jul 20 16:44:18 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Thu, 20 Jul 2006 16:44:18 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607202144.QAA30722@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.20 -> 1.21 --- Log message: When i rewrite the createnight function in nightlytestaccept.cgi i introduced a syntax error into the database query. this should clear that up. --- Diffs of the changes: (+4 -4) NightlyTestAccept.cgi | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.20 nightlytest-serverside/NightlyTestAccept.cgi:1.21 --- nightlytest-serverside/NightlyTestAccept.cgi:1.20 Wed Jul 19 20:23:44 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Thu Jul 20 16:44:05 2006 @@ -381,10 +381,10 @@ my $d = $dbh->prepare("select * from code ORDER BY added DESC"); $d->execute; - @row = $d->fetchrow_array; - if(!@row or ($row[1] != $_[1] && $row[2] != $_[2] && $row[3] != $_[3])){ - my $e = $dbh->prepare("insert into code (added, loc, files, dirs) values (\"$_[0]\", $_[1], $_[2], $_[3])"); - $e->execute; + @row = $d->fetchrow_hashref; + if(!@row || ($row->{'loc'} != $_[1] || $row->{'files'} != $_[2] || $row->{'dirs'} != $_[3])){ + my $e = $dbh->prepare("insert into code (added, loc, files, dirs) values (\"$_[0]\", $_[1], $_[2], $_[3])"); + $e->execute; } } From pjenkins at apple.com Thu Jul 20 17:28:56 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Thu, 20 Jul 2006 17:28:56 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607202228.RAA24155@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.17 -> 1.18 --- Log message: We now fail and print an error message if a nightly tester does not specify a nickname on the command line --- Diffs of the changes: (+8 -0) NewNightlyTest.pl | 8 ++++++++ 1 files changed, 8 insertions(+) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.17 llvm/utils/NewNightlyTest.pl:1.18 --- llvm/utils/NewNightlyTest.pl:1.17 Thu Jul 20 11:54:43 2006 +++ llvm/utils/NewNightlyTest.pl Thu Jul 20 17:28:43 2006 @@ -139,6 +139,7 @@ $CONFIGUREARGS .= "--with-externals=$ARGV[0]"; shift; next; } if (/^-nickname$/) { $nickname = "$ARGV[0]"; shift; next; } + else{ $nickname=""; } if (/^-gccpath/) { $CONFIGUREARGS .= " CC=$ARGV[0]/gcc CXX=$ARGV[0]/g++"; $GCCPATH=$ARGV[0]; @@ -186,6 +187,10 @@ $WebDir = $ARGV[2]; } +if($nickname eq ""){ + die ("Please invoke NewNightlyTest.pl with command line option \"-nickname \""); +} + ############################################################## # #define the file names we'll use @@ -461,6 +466,9 @@ if (!$NOCHECKOUT) { if (-d $BuildDir) { if (!$NOREMOVE) { + if ( $VERBOSE ){ + print "Build directory exists! Removing it\n"; + } system "rm -rf $BuildDir"; } else { die "CVS checkout directory $BuildDir already exists!"; From pjenkins at apple.com Thu Jul 20 17:31:29 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Thu, 20 Jul 2006 17:31:29 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607202231.RAA26871@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.21 -> 1.22 --- Log message: Fixing a syntax issue --- Diffs of the changes: (+3 -3) NightlyTestAccept.cgi | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.21 nightlytest-serverside/NightlyTestAccept.cgi:1.22 --- nightlytest-serverside/NightlyTestAccept.cgi:1.21 Thu Jul 20 16:44:05 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Thu Jul 20 17:31:16 2006 @@ -297,7 +297,7 @@ " buildtime_wall, dejagnutime_cpu, dejagnutime_wall, warnings,". " warnings_added, warnings_removed, teststats_exppass,". " teststats_unexpfail, teststats_expfail, all_tests,". - " passing_tests, unexpfail_tests, expfail_tests". + " passing_tests, unexpfail_tests, expfail_tests,". " newly_passing_tests, newly_failing_tests, new_tests,". " removed_tests, cvs_added, cvs_removed, cvs_modified,". " cvs_usersadd, cvs_usersco) values (". @@ -381,8 +381,8 @@ my $d = $dbh->prepare("select * from code ORDER BY added DESC"); $d->execute; - @row = $d->fetchrow_hashref; - if(!@row || ($row->{'loc'} != $_[1] || $row->{'files'} != $_[2] || $row->{'dirs'} != $_[3])){ + $row = $d->fetchrow_hashref; + if(!$row || ($row->{'loc'} != $_[1] || $row->{'files'} != $_[2] || $row->{'dirs'} != $_[3])){ my $e = $dbh->prepare("insert into code (added, loc, files, dirs) values (\"$_[0]\", $_[1], $_[2], $_[3])"); $e->execute; } From evan.cheng at apple.com Thu Jul 20 17:44:53 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 20 Jul 2006 17:44:53 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Message-ID: <200607202244.RAA30659@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: DAGCombiner.cpp updated: 1.176 -> 1.177 --- Log message: If a shuffle is unary, i.e. one of the vector argument is not needed, turn the operand into a undef and adjust mask accordingly. --- Diffs of the changes: (+56 -10) DAGCombiner.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 56 insertions(+), 10 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.176 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.177 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.176 Thu Jul 20 12:43:27 2006 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Thu Jul 20 17:44:41 2006 @@ -2597,10 +2597,33 @@ } } if (isIdentity) return N->getOperand(1); - - // If the LHS and the RHS are the same node, turn the RHS into an undef. - if (N->getOperand(0) == N->getOperand(1)) { - if (N->getOperand(0).getOpcode() == ISD::UNDEF) + + // Check if the shuffle is a unary shuffle, i.e. one of the vectors is not + // needed at all. + bool isUnary = true; + int VecNum = -1; + for (unsigned i = 0; i != NumElts; ++i) + if (ShufMask.getOperand(i).getOpcode() != ISD::UNDEF) { + unsigned Idx = cast(ShufMask.getOperand(i))->getValue(); + int V = (Idx < NumElts) ? 0 : 1; + if (VecNum == -1) + VecNum = V; + else if (VecNum != V) { + isUnary = false; + break; + } + } + + SDOperand N0 = N->getOperand(0); + SDOperand N1 = N->getOperand(1); + // Normalize unary shuffle so the RHS is undef. + if (isUnary && VecNum == 1) + std::swap(N0, N1); + + // If it is a unary or the LHS and the RHS are the same node, turn the RHS + // into an undef. + if (isUnary || N0 == N1) { + if (N0.getOpcode() == ISD::UNDEF) return DAG.getNode(ISD::UNDEF, N->getValueType(0)); // Check the SHUFFLE mask, mapping any inputs from the 2nd operand into the // first operand. @@ -2619,7 +2642,7 @@ MappedOps); AddToWorkList(ShufMask.Val); return DAG.getNode(ISD::VECTOR_SHUFFLE, N->getValueType(0), - N->getOperand(0), + N0, DAG.getNode(ISD::UNDEF, N->getValueType(0)), ShufMask); } @@ -2653,8 +2676,31 @@ } if (isIdentity) return N->getOperand(1); - // If the LHS and the RHS are the same node, turn the RHS into an undef. - if (N->getOperand(0) == N->getOperand(1)) { + // Check if the shuffle is a unary shuffle, i.e. one of the vectors is not + // needed at all. + bool isUnary = true; + int VecNum = -1; + for (unsigned i = 0; i != NumElts; ++i) + if (ShufMask.getOperand(i).getOpcode() != ISD::UNDEF) { + unsigned Idx = cast(ShufMask.getOperand(i))->getValue(); + int V = (Idx < NumElts) ? 0 : 1; + if (VecNum == -1) + VecNum = V; + else if (VecNum != V) { + isUnary = false; + break; + } + } + + SDOperand N0 = N->getOperand(0); + SDOperand N1 = N->getOperand(1); + // Normalize unary shuffle so the RHS is undef. + if (isUnary && VecNum == 1) + std::swap(N0, N1); + + // If it is a unary or the LHS and the RHS are the same node, turn the RHS + // into an undef. + if (isUnary || N0 == N1) { // Check the SHUFFLE mask, mapping any inputs from the 2nd operand into the // first operand. std::vector MappedOps; @@ -2680,12 +2726,12 @@ SDOperand UDVal = DAG.getNode(ISD::UNDEF, MappedOps[0].getValueType()); for (unsigned i = 0; i != NumElts; ++i) MappedOps[i] = UDVal; - MappedOps[NumElts ] = *(N->getOperand(0).Val->op_end()-2); - MappedOps[NumElts+1] = *(N->getOperand(0).Val->op_end()-1); + MappedOps[NumElts ] = *(N0.Val->op_end()-2); + MappedOps[NumElts+1] = *(N0.Val->op_end()-1); UDVal = DAG.getNode(ISD::VBUILD_VECTOR, MVT::Vector, MappedOps); return DAG.getNode(ISD::VVECTOR_SHUFFLE, MVT::Vector, - N->getOperand(0), UDVal, ShufMask, + N0, UDVal, ShufMask, MappedOps[NumElts], MappedOps[NumElts+1]); } From evan.cheng at apple.com Thu Jul 20 17:52:42 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 20 Jul 2006 17:52:42 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp Message-ID: <200607202252.RAA31738@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86RegisterInfo.cpp updated: 1.161 -> 1.162 --- Log message: Missing a space. --- Diffs of the changes: (+1 -1) X86RegisterInfo.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.161 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.162 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.161 Wed Jul 19 14:32:06 2006 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Thu Jul 20 17:52:28 2006 @@ -223,7 +223,7 @@ static bool TableIsSorted(const TableEntry *Table, unsigned NumEntries) { for (unsigned i = 1; i != NumEntries; ++i) if (!(Table[i-1] < Table[i])) { - std::cerr << "Entries out of order" << Table[i-1].from + std::cerr << "Entries out of order " << Table[i-1].from << " " << Table[i].from << "\n"; return false; } From evan.cheng at apple.com Thu Jul 20 18:10:00 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 20 Jul 2006 18:10:00 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp Message-ID: <200607202310.SAA03976@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelLowering.cpp updated: 1.237 -> 1.238 --- Log message: A splat of a vector constant of all zero or all one is the vector constant. --- Diffs of the changes: (+2 -0) X86ISelLowering.cpp | 2 ++ 1 files changed, 2 insertions(+) Index: llvm/lib/Target/X86/X86ISelLowering.cpp diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.237 llvm/lib/Target/X86/X86ISelLowering.cpp:1.238 --- llvm/lib/Target/X86/X86ISelLowering.cpp:1.237 Wed Jul 12 11:59:49 2006 +++ llvm/lib/Target/X86/X86ISelLowering.cpp Thu Jul 20 18:09:47 2006 @@ -2393,6 +2393,8 @@ bool V2IsUndef = V2.getOpcode() == ISD::UNDEF; if (isSplatMask(PermMask.Val)) { + if (ISD::isBuildVectorAllZeros(V1.Val) || ISD::isBuildVectorAllOnes(V1.Val)) + return V1; if (NumElems <= 4) return Op; // Promote it to a v4i32 splat. return PromoteSplat(Op, DAG); From evan.cheng at apple.com Thu Jul 20 18:36:33 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 20 Jul 2006 18:36:33 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/DAGISelEmitter.cpp Message-ID: <200607202336.SAA18034@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: DAGISelEmitter.cpp updated: 1.223 -> 1.224 --- Log message: Also checks for noResults field. --- Diffs of the changes: (+4 -1) DAGISelEmitter.cpp | 5 ++++- 1 files changed, 4 insertions(+), 1 deletion(-) Index: llvm/utils/TableGen/DAGISelEmitter.cpp diff -u llvm/utils/TableGen/DAGISelEmitter.cpp:1.223 llvm/utils/TableGen/DAGISelEmitter.cpp:1.224 --- llvm/utils/TableGen/DAGISelEmitter.cpp:1.223 Tue Jul 18 19:24:41 2006 +++ llvm/utils/TableGen/DAGISelEmitter.cpp Thu Jul 20 18:36:20 2006 @@ -742,8 +742,11 @@ assert(NumResults <= 1 && "Only supports zero or one result instrs!"); + + CodeGenInstruction &InstInfo = + ISE.getTargetInfo().getInstruction(getOperator()->getName()); // Apply the result type to the node - if (NumResults == 0) { + if (NumResults == 0 || InstInfo.noResults) { // FIXME: temporary hack... MadeChange = UpdateNodeType(MVT::isVoid, TP); } else { Record *ResultNode = Inst.getResult(0); From evan.cheng at apple.com Thu Jul 20 18:50:25 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 20 Jul 2006 18:50:25 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/X86/vec_shuffle-6.ll Message-ID: <200607202350.SAA20119@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/X86: vec_shuffle-6.ll updated: 1.3 -> 1.4 --- Log message: Fix a broken test. --- Diffs of the changes: (+3 -2) vec_shuffle-6.ll | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) Index: llvm/test/Regression/CodeGen/X86/vec_shuffle-6.ll diff -u llvm/test/Regression/CodeGen/X86/vec_shuffle-6.ll:1.3 llvm/test/Regression/CodeGen/X86/vec_shuffle-6.ll:1.4 --- llvm/test/Regression/CodeGen/X86/vec_shuffle-6.ll:1.3 Wed Jul 12 01:48:47 2006 +++ llvm/test/Regression/CodeGen/X86/vec_shuffle-6.ll Thu Jul 20 18:50:13 2006 @@ -1,5 +1,6 @@ -; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep movapd | wc -l | grep 1 -; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep movaps | wc -l | grep 1 +; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 && +; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep movapd | wc -l | grep 1 && +; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep movaps | wc -l | grep 1 && ; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep movups | wc -l | grep 2 target triple = "i686-apple-darwin" From evan.cheng at apple.com Thu Jul 20 18:51:14 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 20 Jul 2006 18:51:14 -0500 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/X86/vec_shuffle-7.ll Message-ID: <200607202351.SAA20182@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/X86: vec_shuffle-7.ll added (r1.1) --- Log message: New vector shuffle test case. --- Diffs of the changes: (+10 -0) vec_shuffle-7.ll | 10 ++++++++++ 1 files changed, 10 insertions(+) Index: llvm/test/Regression/CodeGen/X86/vec_shuffle-7.ll diff -c /dev/null llvm/test/Regression/CodeGen/X86/vec_shuffle-7.ll:1.1 *** /dev/null Thu Jul 20 18:51:11 2006 --- llvm/test/Regression/CodeGen/X86/vec_shuffle-7.ll Thu Jul 20 18:51:01 2006 *************** *** 0 **** --- 1,10 ---- + ; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 && + ; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep xorps | wc -l | grep 1 && + ; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | not grep shufps + + void %test() { + cast <4 x int> zeroinitializer to <4 x float> + shufflevector <4 x float> %0, <4 x float> zeroinitializer, <4 x uint> zeroinitializer + store <4 x float> %1, <4 x float>* null + unreachable + } From lattner at cs.uiuc.edu Thu Jul 20 19:06:39 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 20 Jul 2006 19:06:39 -0500 Subject: [llvm-commits] CVS: llvm/docs/GettingStarted.html Message-ID: <200607210006.TAA22670@zion.cs.uiuc.edu> Changes in directory llvm/docs: GettingStarted.html updated: 1.135 -> 1.136 --- Log message: Add some notes about mingw, patch contributed by Anton Korobeynikov. --- Diffs of the changes: (+11 -5) GettingStarted.html | 16 +++++++++++----- 1 files changed, 11 insertions(+), 5 deletions(-) Index: llvm/docs/GettingStarted.html diff -u llvm/docs/GettingStarted.html:1.135 llvm/docs/GettingStarted.html:1.136 --- llvm/docs/GettingStarted.html:1.135 Fri Jun 16 18:20:21 2006 +++ llvm/docs/GettingStarted.html Thu Jul 20 19:06:27 2006 @@ -239,12 +239,12 @@ Cygwin/Win32 - x861 + x861,8 GCC 3.4.X, binutils 2.15 MinGW/Win32 - x861,6 + x861,6,8 GCC 3.4.X, binutils 2.15 @@ -306,9 +306,15 @@
  • The GCC-based C/C++ frontend does not build
  • The port is done using the MSYS shell. Download and install -bison (excl. M4.exe) and flex in that order. Build binutils-2.15 from source, -if necessary.
  • +bison (excl. M4.exe) and flex in that order. Build binutils-2.15 from source, +if necessary. Bison & flex can be also grabbed from GNUWin32 sf.net project
  • Native code generation exists but is not complete.
  • +
  • Binutils up to post-2.17 has bug in bfd/cofflink.c + preventing LLVM from building correctly. Several workarounds have been + introduced into LLVM build system, but the bug can occur anytime in the + future. It's highly recommended to rebuild your current binutils with the + patch from + Binutils bugzilla, if it's wasn't already applied.
  • @@ -1543,7 +1549,7 @@ Chris Lattner
    Reid Spencer
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2006/06/16 23:20:21 $ + Last modified: $Date: 2006/07/21 00:06:27 $ From lattner at cs.uiuc.edu Thu Jul 20 19:10:19 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 20 Jul 2006 19:10:19 -0500 Subject: [llvm-commits] CVS: llvm/tools/llc/Makefile Message-ID: <200607210010.TAA23254@zion.cs.uiuc.edu> Changes in directory llvm/tools/llc: Makefile updated: 1.85 -> 1.86 --- Log message: Build more debugger/selectiondag libraries as archives instead of .o files. This works around bugs in some versions of the cygwin linker. Patch contributed by Anton Korobeynikov. --- Diffs of the changes: (+1 -1) Makefile | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/tools/llc/Makefile diff -u llvm/tools/llc/Makefile:1.85 llvm/tools/llc/Makefile:1.86 --- llvm/tools/llc/Makefile:1.85 Thu Jul 20 12:27:58 2006 +++ llvm/tools/llc/Makefile Thu Jul 20 19:10:06 2006 @@ -55,7 +55,7 @@ endif USEDLIBS += \ - LLVMSelectionDAG \ + LLVMSelectionDAG.a \ LLVMCodeGen.a \ LLVMTarget.a \ LLVMipa.a \ From lattner at cs.uiuc.edu Thu Jul 20 19:10:19 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 20 Jul 2006 19:10:19 -0500 Subject: [llvm-commits] CVS: llvm/Makefile.rules Message-ID: <200607210010.TAA23258@zion.cs.uiuc.edu> Changes in directory llvm: Makefile.rules updated: 1.386 -> 1.387 --- Log message: Build more debugger/selectiondag libraries as archives instead of .o files. This works around bugs in some versions of the cygwin linker. Patch contributed by Anton Korobeynikov. --- Diffs of the changes: (+3 -3) Makefile.rules | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/Makefile.rules diff -u llvm/Makefile.rules:1.386 llvm/Makefile.rules:1.387 --- llvm/Makefile.rules:1.386 Thu Jul 20 12:27:58 2006 +++ llvm/Makefile.rules Thu Jul 20 19:10:06 2006 @@ -620,7 +620,7 @@ # What the X86 JIT requires ifdef ENABLE_X86_JIT - JIT_LIBS += LLVMX86 LLVMSelectionDAG + JIT_LIBS += LLVMX86 LLVMSelectionDAG.a endif # You can enable the PowerPC JIT on a non-PowerPC host by setting the flag @@ -632,7 +632,7 @@ # What the PowerPC JIT requires ifdef ENABLE_PPC_JIT - JIT_LIBS += LLVMPowerPC LLVMSelectionDAG + JIT_LIBS += LLVMPowerPC LLVMSelectionDAG.a endif # You can enable the Alpha JIT on a non-Alpha host by setting the flag @@ -644,7 +644,7 @@ # What the Alpha JIT requires ifdef ENABLE_ALPHA_JIT - JIT_LIBS += LLVMAlpha LLVMSelectionDAG + JIT_LIBS += LLVMAlpha LLVMSelectionDAG.a endif LLVMLIBS := $(JIT_LIBS) LLVMScalarOpts.a LLVMTransformUtils.a LLVMAnalysis.a \ From lattner at cs.uiuc.edu Thu Jul 20 19:11:01 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 20 Jul 2006 19:11:01 -0500 Subject: [llvm-commits] CVS: llvm/tools/llvm-db/Makefile Message-ID: <200607210011.TAA23355@zion.cs.uiuc.edu> Changes in directory llvm/tools/llvm-db: Makefile updated: 1.11 -> 1.12 --- Log message: Build more debugger/selectiondag libraries as archives instead of .o files. This works around bugs in some versions of the cygwin linker. Patch contributed by Anton Korobeynikov. --- Diffs of the changes: (+1 -1) Makefile | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/tools/llvm-db/Makefile diff -u llvm/tools/llvm-db/Makefile:1.11 llvm/tools/llvm-db/Makefile:1.12 --- llvm/tools/llvm-db/Makefile:1.11 Thu Jul 6 19:46:18 2006 +++ llvm/tools/llvm-db/Makefile Thu Jul 20 19:10:47 2006 @@ -9,7 +9,7 @@ LEVEL = ../.. TOOLNAME = llvm-db -USEDLIBS = LLVMDebugger LLVMBCReader.a LLVMCore.a LLVMSupport.a \ +USEDLIBS = LLVMDebugger.a LLVMBCReader.a LLVMCore.a LLVMSupport.a \ LLVMbzip2.a LLVMSystem.a REQUIRES_EH := 1 From lattner at cs.uiuc.edu Thu Jul 20 19:11:01 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 20 Jul 2006 19:11:01 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/Makefile Message-ID: <200607210011.TAA23361@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: Makefile updated: 1.5 -> 1.6 --- Log message: Build more debugger/selectiondag libraries as archives instead of .o files. This works around bugs in some versions of the cygwin linker. Patch contributed by Anton Korobeynikov. --- Diffs of the changes: (+1 -0) Makefile | 1 + 1 files changed, 1 insertion(+) Index: llvm/lib/CodeGen/SelectionDAG/Makefile diff -u llvm/lib/CodeGen/SelectionDAG/Makefile:1.5 llvm/lib/CodeGen/SelectionDAG/Makefile:1.6 --- llvm/lib/CodeGen/SelectionDAG/Makefile:1.5 Wed May 31 20:30:26 2006 +++ llvm/lib/CodeGen/SelectionDAG/Makefile Thu Jul 20 19:10:47 2006 @@ -9,5 +9,6 @@ LEVEL = ../../.. LIBRARYNAME = LLVMSelectionDAG PARALLEL_DIRS = +BUILD_ARCHIVE = 1 include $(LEVEL)/Makefile.common From lattner at cs.uiuc.edu Thu Jul 20 19:11:01 2006 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu, 20 Jul 2006 19:11:01 -0500 Subject: [llvm-commits] CVS: llvm/lib/Debugger/Makefile Message-ID: <200607210011.TAA23359@zion.cs.uiuc.edu> Changes in directory llvm/lib/Debugger: Makefile updated: 1.4 -> 1.5 --- Log message: Build more debugger/selectiondag libraries as archives instead of .o files. This works around bugs in some versions of the cygwin linker. Patch contributed by Anton Korobeynikov. --- Diffs of the changes: (+1 -0) Makefile | 1 + 1 files changed, 1 insertion(+) Index: llvm/lib/Debugger/Makefile diff -u llvm/lib/Debugger/Makefile:1.4 llvm/lib/Debugger/Makefile:1.5 --- llvm/lib/Debugger/Makefile:1.4 Fri Jul 7 11:46:43 2006 +++ llvm/lib/Debugger/Makefile Thu Jul 20 19:10:47 2006 @@ -11,5 +11,6 @@ LIBRARYNAME = LLVMDebugger EXTRA_DIST = README.txt REQUIRES_EH := 1 +BUILD_ARCHIVE = 1 include $(LEVEL)/Makefile.common From pjenkins at apple.com Thu Jul 20 20:34:13 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Thu, 20 Jul 2006 20:34:13 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607210134.UAA02614@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.18 -> 1.19 --- Log message: The nightly tester will no longer report numbers instead of tests performed. --- Diffs of the changes: (+3 -3) NewNightlyTest.pl | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.18 llvm/utils/NewNightlyTest.pl:1.19 --- llvm/utils/NewNightlyTest.pl:1.18 Thu Jul 20 17:28:43 2006 +++ llvm/utils/NewNightlyTest.pl Thu Jul 20 20:34:01 2006 @@ -824,13 +824,13 @@ for($x=0; $x<@DEJAGNU; $x++){ if($DEJAGNU[$x] =~ m/^PASS:/){ - $passes.="$x\n"; + $passes.="$DEJAGNU[$x]\n"; } elsif($DEJAGNU[$x] =~ m/^FAIL:/){ - $fails.="$x\n"; + $fails.="$DEJAGNU[$x]\n"; } elsif($DEJAGNU[$x] =~ m/^XFAIL:/){ - $xfails.="$x\n"; + $xfails.="$DEJAGNU[$x]\n"; } } From pjenkins at apple.com Thu Jul 20 20:39:54 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Thu, 20 Jul 2006 20:39:54 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607210139.UAA02686@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.19 -> 1.20 --- Log message: Fixed issue where nightly test always tells you you need to use -nickname --- Diffs of the changes: (+1 -2) NewNightlyTest.pl | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.19 llvm/utils/NewNightlyTest.pl:1.20 --- llvm/utils/NewNightlyTest.pl:1.19 Thu Jul 20 20:34:01 2006 +++ llvm/utils/NewNightlyTest.pl Thu Jul 20 20:39:42 2006 @@ -106,7 +106,7 @@ # ############################################################## $CONFIGUREARGS=""; - +$nickname=""; $NOTEST=0; $NORUNNINGTESTS=0; @@ -139,7 +139,6 @@ $CONFIGUREARGS .= "--with-externals=$ARGV[0]"; shift; next; } if (/^-nickname$/) { $nickname = "$ARGV[0]"; shift; next; } - else{ $nickname=""; } if (/^-gccpath/) { $CONFIGUREARGS .= " CC=$ARGV[0]/gcc CXX=$ARGV[0]/g++"; $GCCPATH=$ARGV[0]; From evan.cheng at apple.com Fri Jul 21 03:26:18 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Fri, 21 Jul 2006 03:26:18 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Message-ID: <200607210826.DAA14760@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: DAGCombiner.cpp updated: 1.177 -> 1.178 --- Log message: If a shuffle is a splat, check if the argument is a build_vector with all elements being the same. If so, return the argument. --- Diffs of the changes: (+90 -8) DAGCombiner.cpp | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 90 insertions(+), 8 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.177 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.178 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.177 Thu Jul 20 17:44:41 2006 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Fri Jul 21 03:25:53 2006 @@ -2601,16 +2601,23 @@ // Check if the shuffle is a unary shuffle, i.e. one of the vectors is not // needed at all. bool isUnary = true; + bool isSplat = true; int VecNum = -1; + unsigned BaseIdx; for (unsigned i = 0; i != NumElts; ++i) if (ShufMask.getOperand(i).getOpcode() != ISD::UNDEF) { unsigned Idx = cast(ShufMask.getOperand(i))->getValue(); int V = (Idx < NumElts) ? 0 : 1; - if (VecNum == -1) + if (VecNum == -1) { VecNum = V; - else if (VecNum != V) { - isUnary = false; - break; + BaseIdx = Idx; + } else { + if (BaseIdx != Idx) + isSplat = false; + if (VecNum != V) { + isUnary = false; + break; + } } } @@ -2620,6 +2627,40 @@ if (isUnary && VecNum == 1) std::swap(N0, N1); + // If it is a splat, check if the argument vector is a build_vector with + // all scalar elements the same. + if (isSplat) { + SDNode *V = N0.Val; + if (V->getOpcode() == ISD::BIT_CONVERT) + V = V->getOperand(0).Val; + if (V->getOpcode() == ISD::BUILD_VECTOR) { + unsigned NumElems = V->getNumOperands()-2; + if (NumElems > BaseIdx) { + SDOperand Base; + bool AllSame = true; + for (unsigned i = 0; i != NumElems; ++i) { + if (V->getOperand(i).getOpcode() != ISD::UNDEF) { + Base = V->getOperand(i); + break; + } + } + // Splat of , return + if (!Base.Val) + return N0; + for (unsigned i = 0; i != NumElems; ++i) { + if (V->getOperand(i).getOpcode() != ISD::UNDEF && + V->getOperand(i) != Base) { + AllSame = false; + break; + } + } + // Splat of , return + if (AllSame) + return N0; + } + } + } + // If it is a unary or the LHS and the RHS are the same node, turn the RHS // into an undef. if (isUnary || N0 == N1) { @@ -2679,16 +2720,23 @@ // Check if the shuffle is a unary shuffle, i.e. one of the vectors is not // needed at all. bool isUnary = true; + bool isSplat = true; int VecNum = -1; + unsigned BaseIdx; for (unsigned i = 0; i != NumElts; ++i) if (ShufMask.getOperand(i).getOpcode() != ISD::UNDEF) { unsigned Idx = cast(ShufMask.getOperand(i))->getValue(); int V = (Idx < NumElts) ? 0 : 1; - if (VecNum == -1) + if (VecNum == -1) { VecNum = V; - else if (VecNum != V) { - isUnary = false; - break; + BaseIdx = Idx; + } else { + if (BaseIdx != Idx) + isSplat = false; + if (VecNum != V) { + isUnary = false; + break; + } } } @@ -2698,6 +2746,40 @@ if (isUnary && VecNum == 1) std::swap(N0, N1); + // If it is a splat, check if the argument vector is a build_vector with + // all scalar elements the same. + if (isSplat) { + SDNode *V = N0.Val; + if (V->getOpcode() == ISD::VBIT_CONVERT) + V = V->getOperand(0).Val; + if (V->getOpcode() == ISD::VBUILD_VECTOR) { + unsigned NumElems = V->getNumOperands()-2; + if (NumElems > BaseIdx) { + SDOperand Base; + bool AllSame = true; + for (unsigned i = 0; i != NumElems; ++i) { + if (V->getOperand(i).getOpcode() != ISD::UNDEF) { + Base = V->getOperand(i); + break; + } + } + // Splat of , return + if (!Base.Val) + return N0; + for (unsigned i = 0; i != NumElems; ++i) { + if (V->getOperand(i).getOpcode() != ISD::UNDEF && + V->getOperand(i) != Base) { + AllSame = false; + break; + } + } + // Splat of , return + if (AllSame) + return N0; + } + } + } + // If it is a unary or the LHS and the RHS are the same node, turn the RHS // into an undef. if (isUnary || N0 == N1) { From evan.cheng at apple.com Fri Jul 21 03:26:58 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Fri, 21 Jul 2006 03:26:58 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp Message-ID: <200607210826.DAA14779@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelLowering.cpp updated: 1.238 -> 1.239 --- Log message: This opt is now handled in DAG combine. --- Diffs of the changes: (+0 -2) X86ISelLowering.cpp | 2 -- 1 files changed, 2 deletions(-) Index: llvm/lib/Target/X86/X86ISelLowering.cpp diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.238 llvm/lib/Target/X86/X86ISelLowering.cpp:1.239 --- llvm/lib/Target/X86/X86ISelLowering.cpp:1.238 Thu Jul 20 18:09:47 2006 +++ llvm/lib/Target/X86/X86ISelLowering.cpp Fri Jul 21 03:26:46 2006 @@ -2393,8 +2393,6 @@ bool V2IsUndef = V2.getOpcode() == ISD::UNDEF; if (isSplatMask(PermMask.Val)) { - if (ISD::isBuildVectorAllZeros(V1.Val) || ISD::isBuildVectorAllOnes(V1.Val)) - return V1; if (NumElems <= 4) return Op; // Promote it to a v4i32 splat. return PromoteSplat(Op, DAG); From rafael.espindola at gmail.com Fri Jul 21 07:26:43 2006 From: rafael.espindola at gmail.com (Rafael Espindola) Date: Fri, 21 Jul 2006 07:26:43 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.td ARMRegisterInfo.cpp Message-ID: <200607211226.HAA18842@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMInstrInfo.td updated: 1.9 -> 1.10 ARMRegisterInfo.cpp updated: 1.8 -> 1.9 --- Log message: implemented sub correctly update the stack pointer in the prologue and epilogue --- Diffs of the changes: (+12 -3) ARMInstrInfo.td | 4 ++++ ARMRegisterInfo.cpp | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) Index: llvm/lib/Target/ARM/ARMInstrInfo.td diff -u llvm/lib/Target/ARM/ARMInstrInfo.td:1.9 llvm/lib/Target/ARM/ARMInstrInfo.td:1.10 --- llvm/lib/Target/ARM/ARMInstrInfo.td:1.9 Tue Jul 18 12:00:30 2006 +++ llvm/lib/Target/ARM/ARMInstrInfo.td Fri Jul 21 07:26:16 2006 @@ -76,3 +76,7 @@ def addri : InstARM<(ops IntRegs:$dst, IntRegs:$a, i32imm:$b), "add $dst, $a, $b", [(set IntRegs:$dst, (add IntRegs:$a, imm:$b))]>; + +def subri : InstARM<(ops IntRegs:$dst, IntRegs:$a, i32imm:$b), + "sub $dst, $a, $b", + [(set IntRegs:$dst, (sub IntRegs:$a, imm:$b))]>; Index: llvm/lib/Target/ARM/ARMRegisterInfo.cpp diff -u llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.8 llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.9 --- llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.8 Tue Jul 18 12:00:30 2006 +++ llvm/lib/Target/ARM/ARMRegisterInfo.cpp Fri Jul 21 07:26:16 2006 @@ -117,14 +117,17 @@ void ARMRegisterInfo::emitPrologue(MachineFunction &MF) const { MachineBasicBlock &MBB = MF.front(); + MachineBasicBlock::iterator MBBI = MBB.begin(); MachineFrameInfo *MFI = MF.getFrameInfo(); int NumBytes = (int) MFI->getStackSize(); //hack assert(NumBytes == 0); - //add a sp = sp - 4 - BuildMI(MBB, MBB.begin(), ARM::str, 1, ARM::R14).addReg(ARM::R13); + //sub sp, sp, #4 + BuildMI(MBB, MBBI, ARM::subri, 2, ARM::R13).addReg(ARM::R13).addImm(4); + //str lr, [sp] + BuildMI(MBB, MBBI, ARM::str, 1, ARM::R14).addReg(ARM::R13); } void ARMRegisterInfo::emitEpilogue(MachineFunction &MF, @@ -138,8 +141,10 @@ //hack assert(NumBytes == 0); + //ldr lr, [sp] BuildMI(MBB, MBBI, ARM::ldr, 2, ARM::R14).addImm(0).addReg(ARM::R13); - //add a sp = sp + 4 + //add sp, sp, #4 + BuildMI(MBB, MBBI, ARM::addri, 2, ARM::R13).addReg(ARM::R13).addImm(4); } unsigned ARMRegisterInfo::getRARegister() const { From pjenkins at apple.com Fri Jul 21 12:24:09 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 12:24:09 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607211724.MAA20010@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.22 -> 1.23 --- Log message: We never actually executed the mysql query to insert the new lines of code, file, and directory counts into the database. --- Diffs of the changes: (+1 -0) NightlyTestAccept.cgi | 1 + 1 files changed, 1 insertion(+) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.22 nightlytest-serverside/NightlyTestAccept.cgi:1.23 --- nightlytest-serverside/NightlyTestAccept.cgi:1.22 Thu Jul 20 17:31:16 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Fri Jul 21 12:23:57 2006 @@ -64,6 +64,7 @@ $row->{'dirs'} != $_[3])){ my $e = $dbh->prepare("insert into code (added, loc, files, dirs) ". "values (\"$_[0]\", $_[1], $_[2], $_[3])"); + $e->execute; } } From dpatel at apple.com Fri Jul 21 14:45:09 2006 From: dpatel at apple.com (Devang Patel) Date: Fri, 21 Jul 2006 14:45:09 -0500 Subject: [llvm-commits] CVS: llvm/Makefile.rules Message-ID: <200607211945.OAA21176@zion.cs.uiuc.edu> Changes in directory llvm: Makefile.rules updated: 1.387 -> 1.388 --- Log message: Fix MacOSX build failures. (pr841: http://llvm.org/PR841 ) --- Diffs of the changes: (+5 -4) Makefile.rules | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) Index: llvm/Makefile.rules diff -u llvm/Makefile.rules:1.387 llvm/Makefile.rules:1.388 --- llvm/Makefile.rules:1.387 Thu Jul 20 19:10:06 2006 +++ llvm/Makefile.rules Fri Jul 21 14:44:55 2006 @@ -609,7 +609,8 @@ Link += -dlopen self # Generic JIT libraries -JIT_LIBS := LLVMInterpreter LLVMJIT LLVMCodeGen.a LLVMExecutionEngine +JIT_LIBS := LLVMInterpreter LLVMJIT LLVMSelectionDAG.a LLVMCodeGen.a \ + LLVMExecutionEngine # You can enable the X86 JIT on a non-X86 host by setting the flag # ENABLE_X86_JIT on the make command line. If not, it will still be @@ -620,7 +621,7 @@ # What the X86 JIT requires ifdef ENABLE_X86_JIT - JIT_LIBS += LLVMX86 LLVMSelectionDAG.a + JIT_LIBS += LLVMX86 endif # You can enable the PowerPC JIT on a non-PowerPC host by setting the flag @@ -632,7 +633,7 @@ # What the PowerPC JIT requires ifdef ENABLE_PPC_JIT - JIT_LIBS += LLVMPowerPC LLVMSelectionDAG.a + JIT_LIBS += LLVMPowerPC endif # You can enable the Alpha JIT on a non-Alpha host by setting the flag @@ -644,7 +645,7 @@ # What the Alpha JIT requires ifdef ENABLE_ALPHA_JIT - JIT_LIBS += LLVMAlpha LLVMSelectionDAG.a + JIT_LIBS += LLVMAlpha endif LLVMLIBS := $(JIT_LIBS) LLVMScalarOpts.a LLVMTransformUtils.a LLVMAnalysis.a \ From dpatel at apple.com Fri Jul 21 14:45:09 2006 From: dpatel at apple.com (Devang Patel) Date: Fri, 21 Jul 2006 14:45:09 -0500 Subject: [llvm-commits] CVS: llvm/tools/llc/Makefile Message-ID: <200607211945.OAA21178@zion.cs.uiuc.edu> Changes in directory llvm/tools/llc: Makefile updated: 1.86 -> 1.87 --- Log message: Fix MacOSX build failures. (pr841: http://llvm.org/PR841 ) --- Diffs of the changes: (+1 -1) Makefile | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/tools/llc/Makefile diff -u llvm/tools/llc/Makefile:1.86 llvm/tools/llc/Makefile:1.87 --- llvm/tools/llc/Makefile:1.86 Thu Jul 20 19:10:06 2006 +++ llvm/tools/llc/Makefile Fri Jul 21 14:44:55 2006 @@ -55,8 +55,8 @@ endif USEDLIBS += \ - LLVMSelectionDAG.a \ LLVMCodeGen.a \ + LLVMSelectionDAG.a \ LLVMTarget.a \ LLVMipa.a \ LLVMTransforms.a \ From pjenkins at apple.com Fri Jul 21 14:50:00 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 14:50:00 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607211950.OAA21270@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.23 -> 1.24 --- Log message: Changed the way buildlogs are written to the server Added support for .o and .a file sizes and now creates a logfile of them on the server --- Diffs of the changes: (+17 -4) NightlyTestAccept.cgi | 21 +++++++++++++++++---- 1 files changed, 17 insertions(+), 4 deletions(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.23 nightlytest-serverside/NightlyTestAccept.cgi:1.24 --- nightlytest-serverside/NightlyTestAccept.cgi:1.23 Fri Jul 21 12:23:57 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Fri Jul 21 14:49:48 2006 @@ -30,6 +30,11 @@ # ################################################################################ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Changes directory to specified directory, the second +# paramater used to be printed out if verbose was turned on. PJ +# found that annoying so he deleted it. +# #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub ChangeDir { # directory, logical name my ($dir,$name) = @_; @@ -468,6 +473,8 @@ my $lines_of_code = param('lines_of_code'); my $cvs_dir_count = param('cvs_file_count'); my $cvs_file_count = param('cvs_dir_count'); +my $o_file_sizes = param('o_file_sizes'); +my $a_file_sizes = param('a_file_sizes'); ################################################################################ @@ -639,16 +646,20 @@ chomp($curr); if(! -d "machines"){ - mkdir "$curr/machines", 0777 or print("couldnt create directory $base"); - } + `mkdir machines -m 777`; + #mkdir "$curr/machines", 0777 or print("couldnt create directory $base"); +} ChangeDir("$curr/machines", "Moving into machines directory"); if(! -d "$machine_id"){ - mkdir "$curr/machines/$machine_id", 0777 or print("couldnt create directory $machine_id because $!"); - } + `mkdir $machine_id -m 777`; + #mkdir "$curr/machines/$machine_id", 777 or print("couldnt create directory $machine_id because $!"); +} ChangeDir("$curr/machines/$machine_id", "Moving into machine $machine_id 's directory"); $db_date =~ s/ /\_/g; my $build_file = "$db_date-Build-Log.txt"; +my $o_file= "$db_date-O-files.txt"; +my $a_file= "$db_date-A-files.txt"; #my $dejagnu_testrun_log_file = "Dejagnu-testrun.log"; #my $dejagnu_testrun_sum_file = "Dejagnu-testrun.sum"; #my $dejagnu_tests_file = "DejagnuTests-Log.txt"; @@ -656,6 +667,8 @@ WriteFile "$build_file", $build_log; +WriteFile "$o_file", $o_file_sizes; +WriteFile "$a_file", $a_file_sizes; #WriteFile "$this_days_logs/$dejagnu_testrun_log_file",$dejagnutests_log; #WriteFile "$this_days_logs/$dejagnu_testrun_sum_file",$dejagnutests_sum; #WriteFile "$this_days_logs/$warnings_file",$buildwarnings; From pjenkins at apple.com Fri Jul 21 14:51:52 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 14:51:52 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607211951.OAA21302@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.20 -> 1.21 --- Log message: Added code to get .a and .o file sizes and submit them to the server in the nightly report. --- Diffs of the changes: (+19 -1) NewNightlyTest.pl | 20 +++++++++++++++++++- 1 files changed, 19 insertions(+), 1 deletion(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.20 llvm/utils/NewNightlyTest.pl:1.21 --- llvm/utils/NewNightlyTest.pl:1.20 Thu Jul 20 20:39:42 2006 +++ llvm/utils/NewNightlyTest.pl Fri Jul 21 14:51:40 2006 @@ -612,6 +612,22 @@ #my $NumLibraries = scalar(grep(!/executable/, @Linked)); #my $NumObjects = `grep ']\: Compiling ' $BuildLog | wc -l` + 0; +if(!$BuildError){ + ChangeDir( "$BuildDir", "Build Directory" ); + $afiles = `find . -iname '*.a' -ls`; + $ofiles = `find . -iname '*.o' -ls`; + @AFILES = split "\n", $afiles; + $a_file_sizes=""; + foreach $x (@AFILES){ + $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/; + $a_file_sizes.="$1 $2\n"; + } @OFILES = split "\n", $ofiles; + $o_file_sizes=""; + foreach $x (@OFILES){ + $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/; + $o_file_sizes.="$1 $2\n"; + } +} my $ConfigTimeU = GetRegexNum "^user", 0, "([0-9.]+)", "$BuildLog"; my $ConfigTimeS = GetRegexNum "^sys", 0, "([0-9.]+)", "$BuildLog"; @@ -1048,7 +1064,9 @@ 'dejagnutests_log' => $dejagnutests_log, 'dejagnutests_sum' => $dejagnutests_sum, 'starttime' => $starttime, - 'endtime' => $endtime); + 'endtime' => $endtime, + 'o_file_sizes' => $o_file_sizes, + 'a_file_sizes' => $a_file_sizes); $TESTING = 0; From jlaskey at apple.com Fri Jul 21 15:57:48 2006 From: jlaskey at apple.com (Jim Laskey) Date: Fri, 21 Jul 2006 15:57:48 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/InstrInfoEmitter.cpp RegisterInfoEmitter.cpp Message-ID: <200607212057.PAA18739@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: InstrInfoEmitter.cpp updated: 1.43 -> 1.44 RegisterInfoEmitter.cpp updated: 1.47 -> 1.48 --- Log message: Use an enumeration to eliminate data relocations. --- Diffs of the changes: (+12 -2) InstrInfoEmitter.cpp | 2 +- RegisterInfoEmitter.cpp | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) Index: llvm/utils/TableGen/InstrInfoEmitter.cpp diff -u llvm/utils/TableGen/InstrInfoEmitter.cpp:1.43 llvm/utils/TableGen/InstrInfoEmitter.cpp:1.44 --- llvm/utils/TableGen/InstrInfoEmitter.cpp:1.43 Thu Jun 15 02:22:16 2006 +++ llvm/utils/TableGen/InstrInfoEmitter.cpp Fri Jul 21 15:57:35 2006 @@ -137,7 +137,7 @@ Record *RC = OperandInfo[i]; // FIXME: We only care about register operands for now. if (RC && RC->isSubClassOf("RegisterClass")) - OS << "{ &" << getQualifiedName(RC) << "RegClass, 0 }, "; + OS << "{ " << getQualifiedName(RC) << "RegClassID, 0 }, "; else if (RC && RC->getName() == "ptr_rc") // Ptr value whose register class is resolved via callback. OS << "{ 0, 1 }, "; Index: llvm/utils/TableGen/RegisterInfoEmitter.cpp diff -u llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.47 llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.48 --- llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.47 Wed Jul 19 00:58:18 2006 +++ llvm/utils/TableGen/RegisterInfoEmitter.cpp Fri Jul 21 15:57:35 2006 @@ -68,6 +68,15 @@ if (!RegisterClasses.empty()) { OS << "namespace " << RegisterClasses[0].Namespace << " { // Register classes\n"; + + OS << " enum {\n"; + for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i) { + if (i) OS << ",\n"; + OS << " " << RegisterClasses[i].getName() << "RegClassID"; + if (!i) OS << " = 1"; + } + OS << "\n };\n\n"; + for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i) { const std::string &Name = RegisterClasses[i].getName(); @@ -165,7 +174,7 @@ for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i) OS << " " << RegisterClasses[i].getName() << "Class\t" << RegisterClasses[i].getName() << "RegClass;\n"; - + std::map > SuperClassMap; OS << "\n"; // Emit the sub-classes array for each RegisterClass @@ -244,6 +253,7 @@ OS << RC.MethodBodies << "\n"; OS << RC.getName() << "Class::" << RC.getName() << "Class() : TargetRegisterClass(" + << RC.getName() + "RegClassID" << ", " << RC.getName() + "VTs" << ", " << RC.getName() + "Subclasses" << ", " << RC.getName() + "Superclasses" << ", " From jlaskey at apple.com Fri Jul 21 15:57:49 2006 From: jlaskey at apple.com (Jim Laskey) Date: Fri, 21 Jul 2006 15:57:49 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/MRegisterInfo.h TargetInstrInfo.h Message-ID: <200607212057.PAA18747@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: MRegisterInfo.h updated: 1.78 -> 1.79 TargetInstrInfo.h updated: 1.90 -> 1.91 --- Log message: Use an enumeration to eliminate data relocations. --- Diffs of the changes: (+19 -18) MRegisterInfo.h | 18 +++++++++++++++--- TargetInstrInfo.h | 19 ++++--------------- 2 files changed, 19 insertions(+), 18 deletions(-) Index: llvm/include/llvm/Target/MRegisterInfo.h diff -u llvm/include/llvm/Target/MRegisterInfo.h:1.78 llvm/include/llvm/Target/MRegisterInfo.h:1.79 --- llvm/include/llvm/Target/MRegisterInfo.h:1.78 Wed Jul 19 00:58:18 2006 +++ llvm/include/llvm/Target/MRegisterInfo.h Fri Jul 21 15:57:35 2006 @@ -49,6 +49,7 @@ typedef const MVT::ValueType* vt_iterator; typedef const TargetRegisterClass* const * sc_iterator; private: + unsigned ID; bool isSubClass; const vt_iterator VTs; const sc_iterator SubClasses; @@ -56,14 +57,18 @@ const unsigned RegSize, Alignment; // Size & Alignment of register in bytes const iterator RegsBegin, RegsEnd; public: - TargetRegisterClass(const MVT::ValueType *vts, + TargetRegisterClass(unsigned id, + const MVT::ValueType *vts, const TargetRegisterClass * const *subcs, const TargetRegisterClass * const *supcs, unsigned RS, unsigned Al, iterator RB, iterator RE) - : VTs(vts), SubClasses(subcs), SuperClasses(supcs), + : ID(id), VTs(vts), SubClasses(subcs), SuperClasses(supcs), RegSize(RS), Alignment(Al), RegsBegin(RB), RegsEnd(RE) {} virtual ~TargetRegisterClass() {} // Allow subclasses - + + // getID() - Return the register class ID number. + unsigned getID() const { return ID; } + // begin/end - Return all of the registers in this class. iterator begin() const { return RegsBegin; } iterator end() const { return RegsEnd; } @@ -300,6 +305,13 @@ unsigned getNumRegClasses() const { return regclass_end()-regclass_begin(); } + + /// getRegClass - Returns the register class associated with the enumeration + /// value. See class TargetOperandInfo. + const TargetRegisterClass *getRegClass(unsigned i) const { + assert(i <= getNumRegClasses() && "Register Class ID out of range"); + return i ? RegClassBegin[i - 1] : NULL; + } //===--------------------------------------------------------------------===// // Interfaces used by the register allocator and stack frame Index: llvm/include/llvm/Target/TargetInstrInfo.h diff -u llvm/include/llvm/Target/TargetInstrInfo.h:1.90 llvm/include/llvm/Target/TargetInstrInfo.h:1.91 --- llvm/include/llvm/Target/TargetInstrInfo.h:1.90 Fri Jun 16 20:42:20 2006 +++ llvm/include/llvm/Target/TargetInstrInfo.h Fri Jul 21 15:57:35 2006 @@ -90,10 +90,10 @@ /// class TargetOperandInfo { public: - /// RegClass - This specifies the register class of the operand if the - /// operand is a register. If not, this contains null. - const TargetRegisterClass *RegClass; - unsigned Flags; + /// RegClass - This specifies the register class enumeration of the operand + /// if the operand is a register. If not, this contains 0. + unsigned short RegClass; + unsigned short Flags; /// Currently no other information. }; @@ -146,17 +146,6 @@ return get(Opcode).Name; } - const TargetRegisterClass - *getInstrOperandRegClass(const TargetInstrDescriptor *II, unsigned Op) const { - if (Op >= II->numOperands) { - assert((II->Flags & M_VARIABLE_OPS)&& "Invalid operand # of instruction"); - return NULL; - } - const TargetOperandInfo &toi = II->OpInfo[Op]; - return (toi.Flags & M_LOOK_UP_PTR_REG_CLASS) - ? getPointerRegClass() : toi.RegClass; - } - int getNumOperands(MachineOpCode Opcode) const { return get(Opcode).numOperands; } From jlaskey at apple.com Fri Jul 21 15:57:49 2006 From: jlaskey at apple.com (Jim Laskey) Date: Fri, 21 Jul 2006 15:57:49 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp ScheduleDAGRRList.cpp Message-ID: <200607212057.PAA18749@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: ScheduleDAG.cpp updated: 1.98 -> 1.99 ScheduleDAGRRList.cpp updated: 1.8 -> 1.9 --- Log message: Use an enumeration to eliminate data relocations. --- Diffs of the changes: (+24 -7) ScheduleDAG.cpp | 29 +++++++++++++++++++++++------ ScheduleDAGRRList.cpp | 2 +- 2 files changed, 24 insertions(+), 7 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.98 llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.99 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.98 Tue Jul 11 13:25:13 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp Fri Jul 21 15:57:35 2006 @@ -226,7 +226,22 @@ return N; } -static unsigned CreateVirtualRegisters(MachineInstr *MI, +static const TargetRegisterClass *getInstrOperandRegClass( + const MRegisterInfo *MRI, + const TargetInstrInfo *TII, + const TargetInstrDescriptor *II, + unsigned Op) { + if (Op >= II->numOperands) { + assert((II->Flags & M_VARIABLE_OPS)&& "Invalid operand # of instruction"); + return NULL; + } + const TargetOperandInfo &toi = II->OpInfo[Op]; + return (toi.Flags & M_LOOK_UP_PTR_REG_CLASS) + ? TII->getPointerRegClass() : MRI->getRegClass(toi.RegClass); +} + +static unsigned CreateVirtualRegisters(const MRegisterInfo *MRI, + MachineInstr *MI, unsigned NumResults, SSARegMap *RegMap, const TargetInstrInfo *TII, @@ -234,10 +249,10 @@ // Create the result registers for this node and add the result regs to // the machine instruction. unsigned ResultReg = - RegMap->createVirtualRegister(TII->getInstrOperandRegClass(&II, 0)); + RegMap->createVirtualRegister(getInstrOperandRegClass(MRI, TII, &II, 0)); MI->addRegOperand(ResultReg, MachineOperand::Def); for (unsigned i = 1; i != NumResults; ++i) { - const TargetRegisterClass *RC = TII->getInstrOperandRegClass(&II, i); + const TargetRegisterClass *RC = getInstrOperandRegClass(MRI, TII, &II, i); assert(RC && "Isn't a register operand!"); MI->addRegOperand(RegMap->createVirtualRegister(RC), MachineOperand::Def); } @@ -276,7 +291,8 @@ // Verify that it is right. assert(MRegisterInfo::isVirtualRegister(VReg) && "Not a vreg?"); if (II) { - const TargetRegisterClass *RC = TII->getInstrOperandRegClass(II, IIOpNum); + const TargetRegisterClass *RC = + getInstrOperandRegClass(MRI, TII, II, IIOpNum); assert(RC && "Don't have operand info for this instruction!"); assert(RegMap->getRegClass(VReg) == RC && "Register class of operand and regclass of use don't agree!"); @@ -333,7 +349,8 @@ // Verify that it is right. assert(MRegisterInfo::isVirtualRegister(VReg) && "Not a vreg?"); if (II) { - const TargetRegisterClass *RC = TII->getInstrOperandRegClass(II, IIOpNum); + const TargetRegisterClass *RC = + getInstrOperandRegClass(MRI, TII, II, IIOpNum); assert(RC && "Don't have operand info for this instruction!"); assert(RegMap->getRegClass(VReg) == RC && "Register class of operand and regclass of use don't agree!"); @@ -389,7 +406,7 @@ // Otherwise, create new virtual registers. if (NumResults && VRBase == 0) - VRBase = CreateVirtualRegisters(MI, NumResults, RegMap, TII, II); + VRBase = CreateVirtualRegisters(MRI, MI, NumResults, RegMap, TII, II); // Emit all of the actual operands of this instruction, adding them to the // instruction as appropriate. Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.8 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.9 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.8 Wed Jun 28 18:17:23 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Fri Jul 21 15:57:35 2006 @@ -152,7 +152,7 @@ if (SU->Node->isTargetOpcode()) { unsigned Opc = SU->Node->getTargetOpcode(); const TargetInstrDescriptor &II = TII->get(Opc); - return II.OpInfo->RegClass; + return MRI->getRegClass(II.OpInfo->RegClass); } else { assert(SU->Node->getOpcode() == ISD::CopyFromReg); unsigned SrcReg = cast(SU->Node->getOperand(1))->getReg(); From jlaskey at apple.com Fri Jul 21 16:15:33 2006 From: jlaskey at apple.com (Jim Laskey) Date: Fri, 21 Jul 2006 16:15:33 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp LiveVariables.cpp RegAllocLocal.cpp RegAllocSimple.cpp VirtRegMap.cpp Message-ID: <200607212115.QAA18899@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: LiveIntervalAnalysis.cpp updated: 1.162 -> 1.163 LiveVariables.cpp updated: 1.55 -> 1.56 RegAllocLocal.cpp updated: 1.82 -> 1.83 RegAllocSimple.cpp updated: 1.69 -> 1.70 VirtRegMap.cpp updated: 1.68 -> 1.69 --- Log message: Eliminate data relocations by using NULL instead of global empty list. --- Diffs of the changes: (+49 -33) LiveIntervalAnalysis.cpp | 6 ++++-- LiveVariables.cpp | 16 ++++++++++------ RegAllocLocal.cpp | 36 ++++++++++++++++++++---------------- RegAllocSimple.cpp | 14 +++++++++----- VirtRegMap.cpp | 10 ++++++---- 5 files changed, 49 insertions(+), 33 deletions(-) Index: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp diff -u llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.162 llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.163 --- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.162 Thu Jul 20 12:28:38 2006 +++ llvm/lib/CodeGen/LiveIntervalAnalysis.cpp Fri Jul 21 16:15:20 2006 @@ -639,8 +639,10 @@ DEBUG(std::cerr << getInstructionIndex(mi) << "\t" << *mi); // handle implicit defs - for (const unsigned* id = tid.ImplicitDefs; *id; ++id) - handleRegisterDef(mbb, mi, *id); + if (tid.ImplicitDefs) { + for (const unsigned* id = tid.ImplicitDefs; *id; ++id) + handleRegisterDef(mbb, mi, *id); + } // handle explicit defs for (int i = mi->getNumOperands() - 1; i >= 0; --i) { Index: llvm/lib/CodeGen/LiveVariables.cpp diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.55 llvm/lib/CodeGen/LiveVariables.cpp:1.56 --- llvm/lib/CodeGen/LiveVariables.cpp:1.55 Wed May 3 20:26:39 2006 +++ llvm/lib/CodeGen/LiveVariables.cpp Fri Jul 21 16:15:20 2006 @@ -239,9 +239,11 @@ NumOperandsToProcess = 1; // Loop over implicit uses, using them. - for (const unsigned *ImplicitUses = MID.ImplicitUses; - *ImplicitUses; ++ImplicitUses) - HandlePhysRegUse(*ImplicitUses, MI); + if (MID.ImplicitUses) { + for (const unsigned *ImplicitUses = MID.ImplicitUses; + *ImplicitUses; ++ImplicitUses) + HandlePhysRegUse(*ImplicitUses, MI); + } // Process all explicit uses... for (unsigned i = 0; i != NumOperandsToProcess; ++i) { @@ -257,9 +259,11 @@ } // Loop over implicit defs, defining them. - for (const unsigned *ImplicitDefs = MID.ImplicitDefs; - *ImplicitDefs; ++ImplicitDefs) - HandlePhysRegDef(*ImplicitDefs, MI); + if (MID.ImplicitDefs) { + for (const unsigned *ImplicitDefs = MID.ImplicitDefs; + *ImplicitDefs; ++ImplicitDefs) + HandlePhysRegDef(*ImplicitDefs, MI); + } // Process all explicit defs... for (unsigned i = 0; i != NumOperandsToProcess; ++i) { Index: llvm/lib/CodeGen/RegAllocLocal.cpp diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.82 llvm/lib/CodeGen/RegAllocLocal.cpp:1.83 --- llvm/lib/CodeGen/RegAllocLocal.cpp:1.82 Thu Jul 20 12:43:27 2006 +++ llvm/lib/CodeGen/RegAllocLocal.cpp Fri Jul 21 16:15:20 2006 @@ -525,9 +525,11 @@ // Loop over the implicit uses, making sure that they are at the head of the // use order list, so they don't get reallocated. - for (const unsigned *ImplicitUses = TID.ImplicitUses; - *ImplicitUses; ++ImplicitUses) - MarkPhysRegRecentlyUsed(*ImplicitUses); + if (TID.ImplicitUses) { + for (const unsigned *ImplicitUses = TID.ImplicitUses; + *ImplicitUses; ++ImplicitUses) + MarkPhysRegRecentlyUsed(*ImplicitUses); + } // Get the used operands into registers. This has the potential to spill // incoming values if we are out of registers. Note that we completely @@ -587,19 +589,21 @@ } // Loop over the implicit defs, spilling them as well. - for (const unsigned *ImplicitDefs = TID.ImplicitDefs; - *ImplicitDefs; ++ImplicitDefs) { - unsigned Reg = *ImplicitDefs; - spillPhysReg(MBB, MI, Reg, true); - PhysRegsUseOrder.push_back(Reg); - PhysRegsUsed[Reg] = 0; // It is free and reserved now - PhysRegsEverUsed[Reg] = true; - - for (const unsigned *AliasSet = RegInfo->getAliasSet(Reg); - *AliasSet; ++AliasSet) { - PhysRegsUseOrder.push_back(*AliasSet); - PhysRegsUsed[*AliasSet] = 0; // It is free and reserved now - PhysRegsEverUsed[*AliasSet] = true; + if (TID.ImplicitDefs) { + for (const unsigned *ImplicitDefs = TID.ImplicitDefs; + *ImplicitDefs; ++ImplicitDefs) { + unsigned Reg = *ImplicitDefs; + spillPhysReg(MBB, MI, Reg, true); + PhysRegsUseOrder.push_back(Reg); + PhysRegsUsed[Reg] = 0; // It is free and reserved now + PhysRegsEverUsed[Reg] = true; + + for (const unsigned *AliasSet = RegInfo->getAliasSet(Reg); + *AliasSet; ++AliasSet) { + PhysRegsUseOrder.push_back(*AliasSet); + PhysRegsUsed[*AliasSet] = 0; // It is free and reserved now + PhysRegsEverUsed[*AliasSet] = true; + } } } Index: llvm/lib/CodeGen/RegAllocSimple.cpp diff -u llvm/lib/CodeGen/RegAllocSimple.cpp:1.69 llvm/lib/CodeGen/RegAllocSimple.cpp:1.70 --- llvm/lib/CodeGen/RegAllocSimple.cpp:1.69 Thu Jul 20 12:28:38 2006 +++ llvm/lib/CodeGen/RegAllocSimple.cpp Fri Jul 21 16:15:20 2006 @@ -166,12 +166,16 @@ unsigned Opcode = MI->getOpcode(); const TargetInstrDescriptor &Desc = TM->getInstrInfo()->get(Opcode); const unsigned *Regs; - for (Regs = Desc.ImplicitUses; *Regs; ++Regs) - RegsUsed[*Regs] = true; + if (Desc.ImplicitUses) { + for (Regs = Desc.ImplicitUses; *Regs; ++Regs) + RegsUsed[*Regs] = true; + } - for (Regs = Desc.ImplicitDefs; *Regs; ++Regs) { - RegsUsed[*Regs] = true; - PhysRegsEverUsed[*Regs] = true; + if (Desc.ImplicitDefs) { + for (Regs = Desc.ImplicitDefs; *Regs; ++Regs) { + RegsUsed[*Regs] = true; + PhysRegsEverUsed[*Regs] = true; + } } // Loop over uses, move from memory into registers. Index: llvm/lib/CodeGen/VirtRegMap.cpp diff -u llvm/lib/CodeGen/VirtRegMap.cpp:1.68 llvm/lib/CodeGen/VirtRegMap.cpp:1.69 --- llvm/lib/CodeGen/VirtRegMap.cpp:1.68 Thu Jul 20 12:28:38 2006 +++ llvm/lib/CodeGen/VirtRegMap.cpp Fri Jul 21 16:15:20 2006 @@ -671,10 +671,12 @@ // Loop over all of the implicit defs, clearing them from our available // sets. - for (const unsigned *ImpDef = TII->getImplicitDefs(MI.getOpcode()); - *ImpDef; ++ImpDef) { - PhysRegsUsed[*ImpDef] = true; - Spills.ClobberPhysReg(*ImpDef); + const unsigned *ImpDef = TII->getImplicitDefs(MI.getOpcode()); + if (ImpDef) { + for ( ; *ImpDef; ++ImpDef) { + PhysRegsUsed[*ImpDef] = true; + Spills.ClobberPhysReg(*ImpDef); + } } DEBUG(std::cerr << '\t' << MI); From jlaskey at apple.com Fri Jul 21 16:15:33 2006 From: jlaskey at apple.com (Jim Laskey) Date: Fri, 21 Jul 2006 16:15:33 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/InstrInfoEmitter.cpp Message-ID: <200607212115.QAA18903@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: InstrInfoEmitter.cpp updated: 1.44 -> 1.45 --- Log message: Eliminate data relocations by using NULL instead of global empty list. --- Diffs of the changes: (+2 -5) InstrInfoEmitter.cpp | 7 ++----- 1 files changed, 2 insertions(+), 5 deletions(-) Index: llvm/utils/TableGen/InstrInfoEmitter.cpp diff -u llvm/utils/TableGen/InstrInfoEmitter.cpp:1.44 llvm/utils/TableGen/InstrInfoEmitter.cpp:1.45 --- llvm/utils/TableGen/InstrInfoEmitter.cpp:1.44 Fri Jul 21 15:57:35 2006 +++ llvm/utils/TableGen/InstrInfoEmitter.cpp Fri Jul 21 16:15:20 2006 @@ -97,9 +97,6 @@ const std::string &TargetName = Target.getName(); Record *InstrInfo = Target.getInstructionSet(); - // Emit empty implicit uses and defs lists - OS << "static const unsigned EmptyImpList[] = { 0 };\n"; - // Keep track of all of the def lists we have emitted already. std::map, unsigned> EmittedLists; unsigned ListNumber = 0; @@ -239,13 +236,13 @@ // Emit the implicit uses and defs lists... std::vector UseList = Inst.TheDef->getValueAsListOfDefs("Uses"); if (UseList.empty()) - OS << "EmptyImpList, "; + OS << "NULL, "; else OS << "ImplicitList" << EmittedLists[UseList] << ", "; std::vector DefList = Inst.TheDef->getValueAsListOfDefs("Defs"); if (DefList.empty()) - OS << "EmptyImpList, "; + OS << "NULL, "; else OS << "ImplicitList" << EmittedLists[DefList] << ", "; From pjenkins at apple.com Fri Jul 21 16:43:21 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 16:43:21 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607212143.QAA19039@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.21 -> 1.22 --- Log message: Fixed an issue of variable scope that prevented file size from being submitted to the server. --- Diffs of the changes: (+6 -4) NewNightlyTest.pl | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.21 llvm/utils/NewNightlyTest.pl:1.22 --- llvm/utils/NewNightlyTest.pl:1.21 Fri Jul 21 14:51:40 2006 +++ llvm/utils/NewNightlyTest.pl Fri Jul 21 16:43:09 2006 @@ -1,5 +1,4 @@ #!/usr/bin/perl - use POSIX qw(strftime); use File::Copy; use Socket; @@ -455,7 +454,7 @@ # Getting Start timestamp # ############################################################## -$starttime = `date`; +$starttime = `date "+20%y-%m-%d %H:%M:%S"`; ############################################################## # @@ -612,6 +611,8 @@ #my $NumLibraries = scalar(grep(!/executable/, @Linked)); #my $NumObjects = `grep ']\: Compiling ' $BuildLog | wc -l` + 0; +my $a_file_sizes=""; +my $o_file_sizes=""; if(!$BuildError){ ChangeDir( "$BuildDir", "Build Directory" ); $afiles = `find . -iname '*.a' -ls`; @@ -621,7 +622,8 @@ foreach $x (@AFILES){ $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/; $a_file_sizes.="$1 $2\n"; - } @OFILES = split "\n", $ofiles; + } + @OFILES = split "\n", $ofiles; $o_file_sizes=""; foreach $x (@OFILES){ $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/; @@ -960,7 +962,7 @@ # Getting end timestamp # ############################################################## -$endtime = `date`; +$endtime = `date "+20%y-%m-%d %H:%M:%S"`; ############################################################## From pjenkins at apple.com Fri Jul 21 16:58:18 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 16:58:18 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607212158.QAA19103@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.22 -> 1.23 --- Log message: Added a check to skip dejagnu test results gathering if we did not run dejagnu tests --- Diffs of the changes: (+13 -11) NewNightlyTest.pl | 24 +++++++++++++----------- 1 files changed, 13 insertions(+), 11 deletions(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.22 llvm/utils/NewNightlyTest.pl:1.23 --- llvm/utils/NewNightlyTest.pl:1.22 Fri Jul 21 16:43:09 2006 +++ llvm/utils/NewNightlyTest.pl Fri Jul 21 16:58:06 2006 @@ -832,22 +832,24 @@ # # ############################################################## -$dejagnu = ReadFile $DejagnuSum; - at DEJAGNU = split "\n", $dejagnu; +my $dejagnu = ReadFile $DejagnuSum; +my @DEJAGNU = split "\n", $dejagnu; my $passes="", my $fails=""; my $xfails=""; -for($x=0; $x<@DEJAGNU; $x++){ - if($DEJAGNU[$x] =~ m/^PASS:/){ - $passes.="$DEJAGNU[$x]\n"; - } - elsif($DEJAGNU[$x] =~ m/^FAIL:/){ - $fails.="$DEJAGNU[$x]\n"; - } - elsif($DEJAGNU[$x] =~ m/^XFAIL:/){ - $xfails.="$DEJAGNU[$x]\n"; +if(!$NODEJAGNU) { + for($x=0; $x<@DEJAGNU; $x++){ + if($DEJAGNU[$x] =~ m/^PASS:/){ + $passes.="$DEJAGNU[$x]\n"; + } + elsif($DEJAGNU[$x] =~ m/^FAIL:/){ + $fails.="$DEJAGNU[$x]\n"; + } + elsif($DEJAGNU[$x] =~ m/^XFAIL:/){ + $xfails.="$DEJAGNU[$x]\n"; + } } } From pjenkins at apple.com Fri Jul 21 17:00:29 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 17:00:29 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607212200.RAA19204@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.24 -> 1.25 --- Log message: The date that is submitted to teh database as the date the test was added is now the date on the central server. --- Diffs of the changes: (+2 -1) NightlyTestAccept.cgi | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.24 nightlytest-serverside/NightlyTestAccept.cgi:1.25 --- nightlytest-serverside/NightlyTestAccept.cgi:1.24 Fri Jul 21 14:49:48 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Fri Jul 21 17:00:17 2006 @@ -584,7 +584,8 @@ $new_tests = Difference $all_tests, $yesterdays_tests; $removed_tests = Difference $yesterdays_tests, $all_tests; -$db_date = $date." ".$time; +#$db_date = $date." ".$time; +$db_date = `date "+20%y-%m-%d %H:%M:%S"`; $night_id= CreateNight $machine_id, $db_date, $buildstatus, $configtime_cpu, $configtime_wall, $cvscheckouttime_cpu, $cvscheckouttime_wall, $buildtime_cpu, $buildtime_wall, From pjenkins at apple.com Fri Jul 21 17:03:23 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 17:03:23 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/test.php Message-ID: <200607212203.RAA19282@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: test.php updated: 1.2 -> 1.3 --- Log message: added a link to the build status that links to build log --- Diffs of the changes: (+1 -1) test.php | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: nightlytest-serverside/test.php diff -u nightlytest-serverside/test.php:1.2 nightlytest-serverside/test.php:1.3 --- nightlytest-serverside/test.php:1.2 Fri Jul 7 19:32:18 2006 +++ nightlytest-serverside/test.php Fri Jul 21 17:03:11 2006 @@ -125,7 +125,7 @@ print "$sign Build Status\n"; print "
    \n"; print "

    Build Status

    "; -print "{$today_row['buildstatus']}
    \n"; +print "{$today_row['buildstatus']}
    \n"; print "


    \n"; /***************************************************** From pjenkins at apple.com Fri Jul 21 17:05:26 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 17:05:26 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/test.php Message-ID: <200607212205.RAA19346@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: test.php updated: 1.3 -> 1.4 --- Log message: The build status link to the build log file doesnt work, this might fix it. --- Diffs of the changes: (+2 -1) test.php | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: nightlytest-serverside/test.php diff -u nightlytest-serverside/test.php:1.3 nightlytest-serverside/test.php:1.4 --- nightlytest-serverside/test.php:1.3 Fri Jul 21 17:03:11 2006 +++ nightlytest-serverside/test.php Fri Jul 21 17:05:14 2006 @@ -122,10 +122,11 @@ $disp="none"; $sign="(-)"; } +$buildfile=str_replace(" ", "_", $cur_date); print "$sign Build Status\n"; print "
    \n"; print "

    Build Status

    "; -print "{$today_row['buildstatus']}
    \n"; +print "{$today_row['buildstatus']}
    \n"; print "


    \n"; /***************************************************** From pjenkins at apple.com Fri Jul 21 17:06:28 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 17:06:28 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/test.php Message-ID: <200607212206.RAA19407@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: test.php updated: 1.4 -> 1.5 --- Log message: The build status link to the build log doesnt work, this should fix it --- Diffs of the changes: (+1 -1) test.php | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: nightlytest-serverside/test.php diff -u nightlytest-serverside/test.php:1.4 nightlytest-serverside/test.php:1.5 --- nightlytest-serverside/test.php:1.4 Fri Jul 21 17:05:14 2006 +++ nightlytest-serverside/test.php Fri Jul 21 17:06:16 2006 @@ -126,7 +126,7 @@ print "$sign Build Status\n"; print "
    \n"; print "

    Build Status

    "; -print "{$today_row['buildstatus']}
    \n"; +print "{$today_row['buildstatus']}
    \n"; print "


    \n"; /***************************************************** From pjenkins at apple.com Fri Jul 21 17:09:29 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 17:09:29 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/test.php Message-ID: <200607212209.RAA19468@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: test.php updated: 1.5 -> 1.6 --- Log message: Added check ot see whether the build log exists to make sure we dont link to a file thats not there --- Diffs of the changes: (+9 -2) test.php | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-) Index: nightlytest-serverside/test.php diff -u nightlytest-serverside/test.php:1.5 nightlytest-serverside/test.php:1.6 --- nightlytest-serverside/test.php:1.5 Fri Jul 21 17:06:16 2006 +++ nightlytest-serverside/test.php Fri Jul 21 17:09:17 2006 @@ -123,10 +123,17 @@ $sign="(-)"; } $buildfile=str_replace(" ", "_", $cur_date); -print "$sign Build Status\n"; +print "$sign Build Status\n"; print "
    \n"; print "

    Build Status

    "; -print "{$today_row['buildstatus']}
    \n"; +if(file_exists("machines/$machine_id/$buildfile-Build-Log.txt")){ + print "". + "{$today_row['buildstatus']}
    \n"; +} +else{ + print "{$today_row['buildstatus']}
    \n"; +} print "


    \n"; /***************************************************** From evan.cheng at apple.com Fri Jul 21 17:20:03 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Fri, 21 Jul 2006 17:20:03 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/DAGISelEmitter.cpp Message-ID: <200607212220.RAA19518@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: DAGISelEmitter.cpp updated: 1.224 -> 1.225 --- Log message: Removed a hack intended to allow (store (op (load))) folding. Will handle this with preprocessing. --- Diffs of the changes: (+7 -52) DAGISelEmitter.cpp | 59 ++++++----------------------------------------------- 1 files changed, 7 insertions(+), 52 deletions(-) Index: llvm/utils/TableGen/DAGISelEmitter.cpp diff -u llvm/utils/TableGen/DAGISelEmitter.cpp:1.224 llvm/utils/TableGen/DAGISelEmitter.cpp:1.225 --- llvm/utils/TableGen/DAGISelEmitter.cpp:1.224 Thu Jul 20 18:36:20 2006 +++ llvm/utils/TableGen/DAGISelEmitter.cpp Fri Jul 21 17:19:51 2006 @@ -2123,7 +2123,6 @@ std::vector &TargetVTs; std::string ChainName; - bool NewTF; bool DoReplace; unsigned TmpNo; unsigned OpcNo; @@ -2159,7 +2158,7 @@ bool dorep) : ISE(ise), Predicates(preds), Pattern(pattern), Instruction(instr), GeneratedCode(gc), GeneratedDecl(gd), TargetOpcodes(to), TargetVTs(tv), - NewTF(false), DoReplace(dorep), TmpNo(0), OpcNo(0), VTNo(0) {} + DoReplace(dorep), TmpNo(0), OpcNo(0), VTNo(0) {} /// EmitMatchCode - Emit a matcher for N, going to the label for PatternNo /// if the match fails. At this point, we already know that the opcode for N @@ -2293,19 +2292,14 @@ } if (NodeHasChain) { + if (FoundChain) + emitCheck("Chain.Val == " + RootName + ".Val"); + else + FoundChain = true; ChainName = "Chain" + ChainSuffix; emitDecl(ChainName); - if (FoundChain) { - // FIXME: temporary workaround for a common case where chain - // is a TokenFactor and the previous "inner" chain is an operand. - NewTF = true; - emitDecl("OldTF", 1); - emitCheck("(" + ChainName + " = UpdateFoldedChain(CurDAG, " + - RootName + ".Val, Chain.Val, OldTF)).Val"); - } else { - FoundChain = true; - emitCode(ChainName + " = " + RootName + ".getOperand(0);"); - } + emitCode(ChainName + " = " + RootName + + ".getOperand(0);"); } } @@ -2762,11 +2756,6 @@ if (!isRoot) return std::make_pair(1, ResNo); - if (NewTF) - emitCode("if (OldTF) " - "SelectionDAG::InsertISelMapEntry(CodeGenMap, OldTF, 0, " + - ChainName + ".Val, 0);"); - for (unsigned i = 0; i < NumResults; i++) emitCode("SelectionDAG::InsertISelMapEntry(CodeGenMap, N.Val, " + utostr(i) + ", ResNode, " + utostr(i) + ");"); @@ -3740,40 +3729,6 @@ OS << "}\n"; OS << "\n"; - OS << "// UpdateFoldedChain - return a SDOperand of the new chain created\n"; - OS << "// if the folding were to happen. This is called when, for example,\n"; - OS << "// a load is folded into a store. If the store's chain is the load,\n"; - OS << "// then the resulting node's input chain would be the load's input\n"; - OS << "// chain. If the store's chain is a TokenFactor and the load's\n"; - OS << "// output chain feeds into in, then the new chain is a TokenFactor\n"; - OS << "// with the other operands along with the input chain of the load.\n"; - OS << "SDOperand UpdateFoldedChain(SelectionDAG *DAG, SDNode *N, " - << "SDNode *Chain, SDNode* &OldTF) {\n"; - OS << " OldTF = NULL;\n"; - OS << " if (N == Chain) {\n"; - OS << " return N->getOperand(0);\n"; - OS << " } else if (Chain->getOpcode() == ISD::TokenFactor &&\n"; - OS << " N->isOperand(Chain)) {\n"; - OS << " SDOperand Ch = SDOperand(Chain, 0);\n"; - OS << " std::map::iterator CGMI = " - << "CodeGenMap.find(Ch);\n"; - OS << " if (CGMI != CodeGenMap.end())\n"; - OS << " return SDOperand(0, 0);\n"; - OS << " OldTF = Chain;\n"; - OS << " std::vector Ops;\n"; - OS << " for (unsigned i = 0; i < Chain->getNumOperands(); ++i) {\n"; - OS << " SDOperand Op = Chain->getOperand(i);\n"; - OS << " if (Op.Val == N)\n"; - OS << " Ops.push_back(N->getOperand(0));\n"; - OS << " else\n"; - OS << " Ops.push_back(Op);\n"; - OS << " }\n"; - OS << " return DAG->getNode(ISD::TokenFactor, MVT::Other, Ops);\n"; - OS << " }\n"; - OS << " return SDOperand(0, 0);\n"; - OS << "}\n"; - - OS << "\n"; OS << "// SelectRoot - Top level entry to DAG isel.\n"; OS << "SDOperand SelectRoot(SDOperand N) {\n"; OS << " SDOperand ResNode;\n"; From evan.cheng at apple.com Fri Jul 21 18:05:00 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Fri, 21 Jul 2006 18:05:00 -0500 Subject: [llvm-commits] CVS: llvm/Makefile.rules Message-ID: <200607212305.SAA19738@zion.cs.uiuc.edu> Changes in directory llvm: Makefile.rules updated: 1.388 -> 1.389 --- Log message: Workaround no longer needed. --- Diffs of the changes: (+1 -6) Makefile.rules | 7 +------ 1 files changed, 1 insertion(+), 6 deletions(-) Index: llvm/Makefile.rules diff -u llvm/Makefile.rules:1.388 llvm/Makefile.rules:1.389 --- llvm/Makefile.rules:1.388 Fri Jul 21 14:44:55 2006 +++ llvm/Makefile.rules Fri Jul 21 18:04:48 2006 @@ -228,7 +228,7 @@ BuildMode := Debug CXX.Flags := -g C.Flags := -g - LD.Flags := -g + LD.Flags := -g KEEP_SYMBOLS := 1 endif endif @@ -395,11 +395,6 @@ DISABLE_AUTO_DEPENDENCIES=1 endif -# Temporary workaround for a Mac OSX compatibility issue. -ifeq ($(OS),Darwin) - CXX.Flags += -fno-use-cxa-atexit -endif - LD.Flags += -L$(LibDir) -L$(LLVMLibDir) CPP.BaseFlags += -D_GNU_SOURCE -D__STDC_LIMIT_MACROS # All -I flags should go here, so that they don't confuse llvm-config. From evan.cheng at apple.com Fri Jul 21 18:06:32 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Fri, 21 Jul 2006 18:06:32 -0500 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/JIT/JIT.cpp Message-ID: <200607212306.SAA19758@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/JIT: JIT.cpp updated: 1.69 -> 1.70 --- Log message: Resolve __dso_handle. --- Diffs of the changes: (+8 -0) JIT.cpp | 8 ++++++++ 1 files changed, 8 insertions(+) Index: llvm/lib/ExecutionEngine/JIT/JIT.cpp diff -u llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.69 llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.70 --- llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.69 Tue Jul 11 19:31:47 2006 +++ llvm/lib/ExecutionEngine/JIT/JIT.cpp Fri Jul 21 18:06:20 2006 @@ -30,6 +30,11 @@ #include using namespace llvm; +#ifdef __APPLE__ +// __dso_handle is resolved by Mac OS X dynamic linker. +extern void *__dso_handle __attribute__ ((__visibility__ ("hidden"))); +#endif + static struct RegisterJIT { RegisterJIT() { JIT::Register(); } } JITRegistrator; @@ -289,6 +294,9 @@ // If the global is external, just remember the address. if (GV->isExternal()) { + // __dso_handle is resolved by the Mac OS X dynamic linker. + if (GV->getName() == "__dso_handle") + return (void*)&__dso_handle; Ptr = sys::DynamicLibrary::SearchForAddressOfSymbol(GV->getName().c_str()); if (Ptr == 0) { std::cerr << "Could not resolve external global address: " From evan.cheng at apple.com Fri Jul 21 18:07:05 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Fri, 21 Jul 2006 18:07:05 -0500 Subject: [llvm-commits] CVS: llvm-test/Makefile.rules Message-ID: <200607212307.SAA19776@zion.cs.uiuc.edu> Changes in directory llvm-test: Makefile.rules updated: 1.14 -> 1.15 --- Log message: Workaround no longer needed. --- Diffs of the changes: (+1 -1) Makefile.rules | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-test/Makefile.rules diff -u llvm-test/Makefile.rules:1.14 llvm-test/Makefile.rules:1.15 --- llvm-test/Makefile.rules:1.14 Wed Jul 19 01:03:03 2006 +++ llvm-test/Makefile.rules Fri Jul 21 18:06:51 2006 @@ -318,7 +318,7 @@ CompileOptimizeOpts := -O3 -DNDEBUG -finline-functions ifeq ($(OS),Darwin) -TARGET_FLAGS := -mdynamic-no-pic -fomit-frame-pointer -fno-use-cxa-atexit +TARGET_FLAGS := -mdynamic-no-pic -fomit-frame-pointer endif ifdef EXTRA_OPTIONS From evan.cheng at apple.com Fri Jul 21 18:07:35 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Fri, 21 Jul 2006 18:07:35 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/README.txt Message-ID: <200607212307.SAA19791@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: README.txt updated: 1.120 -> 1.121 --- Log message: Done. --- Diffs of the changes: (+0 -5) README.txt | 5 ----- 1 files changed, 5 deletions(-) Index: llvm/lib/Target/X86/README.txt diff -u llvm/lib/Target/X86/README.txt:1.120 llvm/lib/Target/X86/README.txt:1.121 --- llvm/lib/Target/X86/README.txt:1.120 Wed Jul 19 16:29:30 2006 +++ llvm/lib/Target/X86/README.txt Fri Jul 21 18:07:23 2006 @@ -707,11 +707,6 @@ //===---------------------------------------------------------------------===// -JIT should resolve __cxa_atexit on Mac OS X. In a non-jit environment, the -symbol is a dynamically resolved by the linker. - -//===---------------------------------------------------------------------===// - u32 to float conversion improvement: float uint32_2_float( unsigned u ) { From pjenkins at apple.com Fri Jul 21 19:00:20 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 19:00:20 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607220000.TAA20027@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.23 -> 1.24 --- Log message: added status message during nightly test --- Diffs of the changes: (+4 -2) NewNightlyTest.pl | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.23 llvm/utils/NewNightlyTest.pl:1.24 --- llvm/utils/NewNightlyTest.pl:1.23 Fri Jul 21 16:58:06 2006 +++ llvm/utils/NewNightlyTest.pl Fri Jul 21 19:00:08 2006 @@ -584,8 +584,7 @@ ############################################################## if (!$NOCHECKOUT && !$NOBUILD) { my $EXTRAFLAGS = "--enable-spec --with-objroot=."; - if ( $VERBOSE ) - { + if ( $VERBOSE ){ print "CONFIGURE STAGE:\n"; print "(time -p $NICE ./configure $CONFIGUREARGS $EXTRAFLAGS) > $BuildLog 2>&1\n"; } @@ -614,6 +613,9 @@ my $a_file_sizes=""; my $o_file_sizes=""; if(!$BuildError){ + if ( $VERBOSE ){ + print "Organizing size of .o and .a files\n"; + } ChangeDir( "$BuildDir", "Build Directory" ); $afiles = `find . -iname '*.a' -ls`; $ofiles = `find . -iname '*.o' -ls`; From evan.cheng at apple.com Fri Jul 21 19:42:15 2006 From: evan.cheng at apple.com (Evan Cheng) Date: Fri, 21 Jul 2006 19:42:15 -0500 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/JIT/JIT.cpp Message-ID: <200607220042.TAA10214@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/JIT: JIT.cpp updated: 1.70 -> 1.71 --- Log message: Forgot to #ifdef __APPLE__ --- Diffs of the changes: (+2 -0) JIT.cpp | 2 ++ 1 files changed, 2 insertions(+) Index: llvm/lib/ExecutionEngine/JIT/JIT.cpp diff -u llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.70 llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.71 --- llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.70 Fri Jul 21 18:06:20 2006 +++ llvm/lib/ExecutionEngine/JIT/JIT.cpp Fri Jul 21 19:42:03 2006 @@ -294,9 +294,11 @@ // If the global is external, just remember the address. if (GV->isExternal()) { +#ifdef __APPLE__ // __dso_handle is resolved by the Mac OS X dynamic linker. if (GV->getName() == "__dso_handle") return (void*)&__dso_handle; +#endif Ptr = sys::DynamicLibrary::SearchForAddressOfSymbol(GV->getName().c_str()); if (Ptr == 0) { std::cerr << "Could not resolve external global address: " From pjenkins at apple.com Fri Jul 21 19:48:24 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Fri, 21 Jul 2006 19:48:24 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607220048.TAA10308@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.25 -> 1.26 --- Log message: Changed the call to the function that updates teh lines of code in the databaes to be the correct function --- Diffs of the changes: (+9 -26) NightlyTestAccept.cgi | 35 +++++++++-------------------------- 1 files changed, 9 insertions(+), 26 deletions(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.25 nightlytest-serverside/NightlyTestAccept.cgi:1.26 --- nightlytest-serverside/NightlyTestAccept.cgi:1.25 Fri Jul 21 17:00:17 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Fri Jul 21 19:48:11 2006 @@ -56,25 +56,6 @@ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # -# Checks to see if our information about the llvm code base is different -# from the last update and if so, adds the information to the database -# -#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -sub CheckCodeBase{ #(added, lines of code, files, directories) - my $d = $dbh->prepare("SELECT * FROM code ORDER BY added DESC"); - $d->execute; - $row=$d->fetchrow_hashref; - if(%$row && ($row->{'loc'} != $_[1] || - $row->{'files'} != $_[2] || - $row->{'dirs'} != $_[3])){ - my $e = $dbh->prepare("insert into code (added, loc, files, dirs) ". - "values (\"$_[0]\", $_[1], $_[2], $_[3])"); - $e->execute; - } -} - -#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# # Queries database to see if there is a machine with the same uname as # the value passed in # @@ -384,15 +365,16 @@ # #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub UpdateCodeInfo{ #date, loc, files, dirs - - my $d = $dbh->prepare("select * from code ORDER BY added DESC"); + my $d = $dbh->prepare("SELECT * FROM code ORDER BY added DESC"); $d->execute; - $row = $d->fetchrow_hashref; - if(!$row || ($row->{'loc'} != $_[1] || $row->{'files'} != $_[2] || $row->{'dirs'} != $_[3])){ - my $e = $dbh->prepare("insert into code (added, loc, files, dirs) values (\"$_[0]\", $_[1], $_[2], $_[3])"); - $e->execute; + $row=$d->fetchrow_hashref; + if(%$row && ($row->{'loc'} != $_[1] || + $row->{'files'} != $_[2] || + $row->{'dirs'} != $_[3])){ + my $e = $dbh->prepare("insert into code (added, loc, files, dirs) ". + "values (\"$_[0]\", $_[1], $_[2], $_[3])"); + $e->execute; } - } ################################################################################ @@ -586,6 +568,7 @@ #$db_date = $date." ".$time; $db_date = `date "+20%y-%m-%d %H:%M:%S"`; +chomp(+$db_date); $night_id= CreateNight $machine_id, $db_date, $buildstatus, $configtime_cpu, $configtime_wall, $cvscheckouttime_cpu, $cvscheckouttime_wall, $buildtime_cpu, $buildtime_wall, From natebegeman at mac.com Sat Jul 22 12:00:05 2006 From: natebegeman at mac.com (Nate Begeman) Date: Sat, 22 Jul 2006 12:00:05 -0500 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/JIT/JIT.cpp Message-ID: <200607221700.MAA17186@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/JIT: JIT.cpp updated: 1.71 -> 1.72 --- Log message: Fix the build on my old and busted version of OS X --- Diffs of the changes: (+6 -1) JIT.cpp | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletion(-) Index: llvm/lib/ExecutionEngine/JIT/JIT.cpp diff -u llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.71 llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.72 --- llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.71 Fri Jul 21 19:42:03 2006 +++ llvm/lib/ExecutionEngine/JIT/JIT.cpp Sat Jul 22 11:59:38 2006 @@ -30,10 +30,13 @@ #include using namespace llvm; -#ifdef __APPLE__ +#ifdef __APPLE__ +#include +#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4 // __dso_handle is resolved by Mac OS X dynamic linker. extern void *__dso_handle __attribute__ ((__visibility__ ("hidden"))); #endif +#endif static struct RegisterJIT { RegisterJIT() { JIT::Register(); } @@ -295,10 +298,12 @@ // If the global is external, just remember the address. if (GV->isExternal()) { #ifdef __APPLE__ +#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4 // __dso_handle is resolved by the Mac OS X dynamic linker. if (GV->getName() == "__dso_handle") return (void*)&__dso_handle; #endif +#endif Ptr = sys::DynamicLibrary::SearchForAddressOfSymbol(GV->getName().c_str()); if (Ptr == 0) { std::cerr << "Could not resolve external global address: " From pjenkins at apple.com Sat Jul 22 14:55:33 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Sat, 22 Jul 2006 14:55:33 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607221955.OAA17794@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.26 -> 1.27 --- Log message: We were looking for wrongly named variables passed via the post method in nightly test results submissions. --- Diffs of the changes: (+9 -11) NightlyTestAccept.cgi | 20 +++++++++----------- 1 files changed, 9 insertions(+), 11 deletions(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.26 nightlytest-serverside/NightlyTestAccept.cgi:1.27 --- nightlytest-serverside/NightlyTestAccept.cgi:1.26 Fri Jul 21 19:48:11 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Sat Jul 22 14:55:21 2006 @@ -421,9 +421,9 @@ $olden_tests="" unless $olden_tests; my @OLDEN_TESTS = split $spliton, $singlesource_tests; -my $filesincvs = param('filesincvs'); -my $dirsincvs = param('dirsindvs'); -my $loc = param('loc'); +my $filesincvs = param('cvs_dir_count'); +my $dirsincvs = param('cvs_file_count'); +my $loc = param('lines_of_code'); my $nickname = param('nickname'); my $cvscheckouttime_cpu=param('cvscheckouttime_cpu'); my $cvscheckouttime_wall=param('cvscheckouttime_wall'); @@ -458,7 +458,6 @@ my $o_file_sizes = param('o_file_sizes'); my $a_file_sizes = param('a_file_sizes'); - ################################################################################ # # Extracting the machine information @@ -473,12 +472,6 @@ ################################################################################ # -# Adding lines of code -# -################################################################################ - -################################################################################ -# # Extracting the dejagnu test numbers # ################################################################################ @@ -568,7 +561,7 @@ #$db_date = $date." ".$time; $db_date = `date "+20%y-%m-%d %H:%M:%S"`; -chomp(+$db_date); +chomp($db_date); $night_id= CreateNight $machine_id, $db_date, $buildstatus, $configtime_cpu, $configtime_wall, $cvscheckouttime_cpu, $cvscheckouttime_wall, $buildtime_cpu, $buildtime_wall, @@ -593,6 +586,11 @@ AddProgram $x, $external_processed{$x}, "external", $night_id; } +################################################################################ +# +# Adding lines of code +# +################################################################################ UpdateCodeInfo $db_date, $loc, $filesincvs, $dirsincvs; print "received $ENV{CONTENT_LENGTH} bytes\n"; From pjenkins at apple.com Sat Jul 22 15:11:49 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Sat, 22 Jul 2006 15:11:49 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607222011.PAA17938@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.27 -> 1.28 --- Log message: removed dupilicate mysql query during nightly test results acceptance --- Diffs of the changes: (+0 -1) NightlyTestAccept.cgi | 1 - 1 files changed, 1 deletion(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.27 nightlytest-serverside/NightlyTestAccept.cgi:1.28 --- nightlytest-serverside/NightlyTestAccept.cgi:1.27 Sat Jul 22 14:55:21 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Sat Jul 22 15:11:36 2006 @@ -545,7 +545,6 @@ # Creating test lists # ################################################################################ -$machine_id = GetMachineId $uname, $hardware, $os, $name, $nickname, $gcc_version; my $d = $dbh->prepare("select * from night where machine = $machine_id ORDER BY added DESC"); $d->execute; my $row=$d->fetchrow_hashref; From pjenkins at apple.com Sun Jul 23 16:38:19 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Sun, 23 Jul 2006 16:38:19 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607232138.QAA29595@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.24 -> 1.25 --- Log message: When the ability to gather .a and .o file sizes was added, it changed the directory the perl script was in so when we tried to run dejagnu tests, everything failed. --- Diffs of the changes: (+32 -25) NewNightlyTest.pl | 57 ++++++++++++++++++++++++++++++------------------------ 1 files changed, 32 insertions(+), 25 deletions(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.24 llvm/utils/NewNightlyTest.pl:1.25 --- llvm/utils/NewNightlyTest.pl:1.24 Fri Jul 21 19:00:08 2006 +++ llvm/utils/NewNightlyTest.pl Sun Jul 23 16:38:07 2006 @@ -200,7 +200,7 @@ my $OldenTestsLog = "$Prefix-Olden-tests.txt"; my $SingleSourceLog = "$Prefix-SingleSource-ProgramTest.txt.gz"; my $MultiSourceLog = "$Prefix-MultiSource-ProgramTest.txt.gz"; -my $ExternalLog = "$Prefix-External-ProgramTest.txt.gz"; +my $ExternalLog = "$Prefix-External-ProgramTest.txt.gz" my $DejagnuLog = "$Prefix-Dejagnu-testrun.log"; my $DejagnuSum = "$Prefix-Dejagnu-testrun.sum"; my $DejagnuTestsLog = "$Prefix-DejagnuTests-Log.txt"; @@ -278,7 +278,8 @@ my ($dir,$name) = @_; chomp($dir); if ( $VERBOSE ) { print "Changing To: $name ($dir)\n"; } - chdir($dir) || die "Cannot change directory to: $name ($dir) "; + chdir($dir) || (print "Cannot change directory to: $name ($dir) " && return -1); + return 0; } #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -610,28 +611,6 @@ #my $NumLibraries = scalar(grep(!/executable/, @Linked)); #my $NumObjects = `grep ']\: Compiling ' $BuildLog | wc -l` + 0; -my $a_file_sizes=""; -my $o_file_sizes=""; -if(!$BuildError){ - if ( $VERBOSE ){ - print "Organizing size of .o and .a files\n"; - } - ChangeDir( "$BuildDir", "Build Directory" ); - $afiles = `find . -iname '*.a' -ls`; - $ofiles = `find . -iname '*.o' -ls`; - @AFILES = split "\n", $afiles; - $a_file_sizes=""; - foreach $x (@AFILES){ - $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/; - $a_file_sizes.="$1 $2\n"; - } - @OFILES = split "\n", $ofiles; - $o_file_sizes=""; - foreach $x (@OFILES){ - $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/; - $o_file_sizes.="$1 $2\n"; - } -} my $ConfigTimeU = GetRegexNum "^user", 0, "([0-9.]+)", "$BuildLog"; my $ConfigTimeS = GetRegexNum "^sys", 0, "([0-9.]+)", "$BuildLog"; @@ -662,6 +641,34 @@ } if ($BuildError) { $NODEJAGNU=1; } +my $a_file_sizes=""; +my $o_file_sizes=""; +if(!$BuildError){ + if ( $VERBOSE ){ + print "Organizing size of .o and .a files\n"; + } + ChangeDir( "$BuildDir/llvm", "Build Directory" ); + $afiles = `find . -iname '*.a' -ls`; + $ofiles = `find . -iname '*.o' -ls`; + @AFILES = split "\n", $afiles; + $a_file_sizes=""; + foreach $x (@AFILES){ + $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/; + $a_file_sizes.="$1 $2\n"; + } + @OFILES = split "\n", $ofiles; + $o_file_sizes=""; + foreach $x (@OFILES){ + $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/; + $o_file_sizes.="$1 $2\n"; + } +} +else{ + $a_file_sizes="No data due to a bad build."; + $o_file_sizes="No data due to a bad build."; +} + + ############################################################## # # Running dejagnu tests @@ -748,7 +755,7 @@ sub TestDirectory { my $SubDir = shift; - ChangeDir( "projects/llvm-test/$SubDir", "Programs Test Subdirectory" ); + ChangeDir( "projects/llvm-test/$SubDir", "Programs Test Subdirectory" ) || return ("", ""); my $ProgramTestLog = "$Prefix-$SubDir-ProgramTest.txt"; #my $ProgramTestLog = "$Prefix-MultiSource-ProgramTest.txt"; #CHANGE ME! From pjenkins at apple.com Sun Jul 23 17:57:41 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Sun, 23 Jul 2006 17:57:41 -0500 Subject: [llvm-commits] CVS: llvm/utils/NewNightlyTest.pl Message-ID: <200607232257.RAA29953@zion.cs.uiuc.edu> Changes in directory llvm/utils: NewNightlyTest.pl updated: 1.25 -> 1.26 --- Log message: Fixing a syntax error and adding buildtype to the .a and .o file size information. --- Diffs of the changes: (+8 -4) NewNightlyTest.pl | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-) Index: llvm/utils/NewNightlyTest.pl diff -u llvm/utils/NewNightlyTest.pl:1.25 llvm/utils/NewNightlyTest.pl:1.26 --- llvm/utils/NewNightlyTest.pl:1.25 Sun Jul 23 16:38:07 2006 +++ llvm/utils/NewNightlyTest.pl Sun Jul 23 17:57:28 2006 @@ -122,7 +122,8 @@ if (/^-norunningtests$/) { $NORUNNINGTESTS = 1; next; } if (/^-parallel$/) { $MAKEOPTS = "$MAKEOPTS -j2 -l3.0"; next; } if (/^-release$/) { $MAKEOPTS = "$MAKEOPTS ENABLE_OPTIMIZED=1 ". - "OPTIMIZE_OPTION=-O2"; next; } + "OPTIMIZE_OPTION=-O2"; + $BUILDTYPE="release"; next; } if (/^-enable-llcbeta$/) { $PROGTESTOPTS .= " ENABLE_LLCBETA=1"; next; } if (/^-disable-llc$/) { $PROGTESTOPTS .= " DISABLE_LLC=1"; $CONFIGUREARGS .= " --disable-llc_diffs"; next; } @@ -188,6 +189,9 @@ if($nickname eq ""){ die ("Please invoke NewNightlyTest.pl with command line option \"-nickname \""); } +if($BUILDTYPE ne "releaese"){ + $BUILDTYPE = "debug"; +} ############################################################## # @@ -200,7 +204,7 @@ my $OldenTestsLog = "$Prefix-Olden-tests.txt"; my $SingleSourceLog = "$Prefix-SingleSource-ProgramTest.txt.gz"; my $MultiSourceLog = "$Prefix-MultiSource-ProgramTest.txt.gz"; -my $ExternalLog = "$Prefix-External-ProgramTest.txt.gz" +my $ExternalLog = "$Prefix-External-ProgramTest.txt.gz"; my $DejagnuLog = "$Prefix-Dejagnu-testrun.log"; my $DejagnuSum = "$Prefix-Dejagnu-testrun.sum"; my $DejagnuTestsLog = "$Prefix-DejagnuTests-Log.txt"; @@ -654,13 +658,13 @@ $a_file_sizes=""; foreach $x (@AFILES){ $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/; - $a_file_sizes.="$1 $2\n"; + $a_file_sizes.="$1 $2 $BUILDTYPE\n"; } @OFILES = split "\n", $ofiles; $o_file_sizes=""; foreach $x (@OFILES){ $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/; - $o_file_sizes.="$1 $2\n"; + $o_file_sizes.="$1 $2 $BUILDTYPE\n"; } } else{ From pjenkins at apple.com Sun Jul 23 18:12:44 2006 From: pjenkins at apple.com (Patrick Jenkins) Date: Sun, 23 Jul 2006 18:12:44 -0500 Subject: [llvm-commits] CVS: nightlytest-serverside/NightlyTestAccept.cgi Message-ID: <200607232312.SAA26694@zion.cs.uiuc.edu> Changes in directory nightlytest-serverside: NightlyTestAccept.cgi updated: 1.28 -> 1.29 --- Log message: We now add .a and .o file sizes to the database. Also fixed an issue where the number of files and number of directories in cvs were being switched when being placed into the database. --- Diffs of the changes: (+90 -81) NightlyTestAccept.cgi | 171 ++++++++++++++++++++++++++------------------------ 1 files changed, 90 insertions(+), 81 deletions(-) Index: nightlytest-serverside/NightlyTestAccept.cgi diff -u nightlytest-serverside/NightlyTestAccept.cgi:1.28 nightlytest-serverside/NightlyTestAccept.cgi:1.29 --- nightlytest-serverside/NightlyTestAccept.cgi:1.28 Sat Jul 22 15:11:36 2006 +++ nightlytest-serverside/NightlyTestAccept.cgi Sun Jul 23 18:12:30 2006 @@ -1,8 +1,9 @@ #!/usr/bin/perl -w # -# Background: Written on June 1st 2006 by Patrick Jenkins to accept test results -# from the llvm NightlyTest.pl script. It is just a CGI script that takes input by the -# POST method. After this it parses the information and places it into the database. +# Background: Written on June 1st 2006 by Patrick Jenkins +# to accept test results from the llvm NightlyTest.pl script. It is just a CGI +# script that takes input by the POST method. After this it parses the +# information and places it into the database. # ################################################################################ use CGI qw(:standard); @@ -108,6 +109,7 @@ chomp $result; return $result; } + #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # mysql> describe machine; @@ -194,88 +196,95 @@ # | cvs_modified | text | YES | | NULL | | # | cvs_usersadd | text | YES | | NULL | | # | cvs_usersco | text | YES | | NULL | | +# | a_file_size | text | YES | | NULL | | +# | o_file_size | text | YES | | NULL | | # +---------------------+------------+------+-----+---------+----------------+ # -# -#CreateNight $machine_id, $db_date, $buildstatus, +#$night_id= CreateNight $machine_id, $db_date, $buildstatus, # $configtime_cpu, $configtime_wall, $cvscheckouttime_cpu, # $cvscheckouttime_wall, $buildtime_cpu, $buildtime_wall, # $dejagnutime_cpu, $dejagnutime_wall, $warnings, # $warnings_added, $warnings_removed, # $dejagnu_exp_passes, $dejagnu_unexp_failures, $dejagnu_exp_failures, #expected pass, unexp fails, exp fails -# $unexpfail_tests, $newly_passing_tests, $newly_failing_tests, +# $all_tests, $passing_tests, $unexpfail_tests, +# $expfail_tests, $newly_passing_tests, $newly_failing_tests, # $new_tests, $removed_tests, # $cvsaddedfiles, $cvsremovedfiles, $cvsmodifiedfiles, -# $cvsusercommitlist, $cvsuserupdatelist; +# $cvsusercommitlist, $cvsuserupdatelist, +# $a_file_size, $o_file_size; +# #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub CreateNight{ for($x=0; $x<@_; $x++){ - $_[$x]="" unless $_[$x]; + $_[$x]="" unless $_[$x]; } -$y=0; -$machine_id=$_[$y]; -$y++; -$db_date=$_[$y]; -$y++; -$buildstatus=$_[$y]; -$y++; -$configtime_cpu=$_[$y]; -$y++; -$configtime_wall=$_[$y]; -$y++; -$cvscheckouttime_cpu=$_[$y]; -$y++; -$cvscheckouttime_wall=$_[$y]; -$y++; -$buildtime_cpu=$_[$y]; -$y++; -$buildtime_wall=$_[$y]; -$y++; -$dejagnutime_cpu=$_[$y]; -$y++; -$dejagnutime_wall=$_[$y]; -$y++; -$warnings=$_[$y]; -$y++; -$warnings_added=$_[$y]; -$y++; -$warnings_removed=$_[$y]; -$y++; -$dejagnu_exp_passes=$_[$y]; -$y++; -$dejagnu_unexp_failures=$_[$y]; -$y++; -$dejagnu_exp_failures=$_[$y]; -$y++; -$all_tests=$_[$y]; -$y++; -$passing_tests=$_[$y]; -$y++; -$unexpfail_tests=$_[$y]; -$y++; -$expfail_tests=$_[$y]; -$y++; -$newly_passing_tests=$_[$y]; -$y++; -$newly_failing_tests=$_[$y]; -$y++; -$new_tests=$_[$y]; -$y++; -$removed_tests=$_[$y]; -$y++; -$cvsaddedfiles=$_[$y]; -$y++; -$cvsremovedfiles=$_[$y]; -$y++; -$cvsmodifiedfiles=$_[$y]; -$y++; -$cvsusercommitlist=$_[$y]; -$y++; -$cvsuserupdatelist=$_[$y]; -$y++; + $y=0; + $machine_id=$_[$y]; + $y++; + $db_date=$_[$y]; + $y++; + $buildstatus=$_[$y]; + $y++; + $configtime_cpu=$_[$y]; + $y++; + $configtime_wall=$_[$y]; + $y++; + $cvscheckouttime_cpu=$_[$y]; + $y++; + $cvscheckouttime_wall=$_[$y]; + $y++; + $buildtime_cpu=$_[$y]; + $y++; + $buildtime_wall=$_[$y]; + $y++; + $dejagnutime_cpu=$_[$y]; + $y++; + $dejagnutime_wall=$_[$y]; + $y++; + $warnings=$_[$y]; + $y++; + $warnings_added=$_[$y]; + $y++; + $warnings_removed=$_[$y]; + $y++; + $dejagnu_exp_passes=$_[$y]; + $y++; + $dejagnu_unexp_failures=$_[$y]; + $y++; + $dejagnu_exp_failures=$_[$y]; + $y++; + $all_tests=$_[$y]; + $y++; + $passing_tests=$_[$y]; + $y++; + $unexpfail_tests=$_[$y]; + $y++; + $expfail_tests=$_[$y]; + $y++; + $newly_passing_tests=$_[$y]; + $y++; + $newly_failing_tests=$_[$y]; + $y++; + $new_tests=$_[$y]; + $y++; + $removed_tests=$_[$y]; + $y++; + $cvsaddedfiles=$_[$y]; + $y++; + $cvsremovedfiles=$_[$y]; + $y++; + $cvsmodifiedfiles=$_[$y]; + $y++; + $cvsusercommitlist=$_[$y]; + $y++; + $cvsuserupdatelist=$_[$y]; + $y++; + $a_file_size=$_[$y]; + $y++; + $o_file_size=$_[$y]; @@ -287,7 +296,7 @@ " passing_tests, unexpfail_tests, expfail_tests,". " newly_passing_tests, newly_failing_tests, new_tests,". " removed_tests, cvs_added, cvs_removed, cvs_modified,". - " cvs_usersadd, cvs_usersco) values (". + " cvs_usersadd, cvs_usersco, a_file_size, o_file_size) values (". "\"$machine_id\", \"$db_date\", \"$buildstatus\",". "\"$configtime_cpu\", \"$configtime_wall\", \"$cvscheckouttime_cpu\",". "\"$cvscheckouttime_wall\", \"$buildtime_cpu\", \"$buildtime_wall\",". @@ -298,7 +307,8 @@ "\"$expfail_tests\", \"$newly_passing_tests\", \"$newly_failing_tests\",". "\"$new_tests\", \"$removed_tests\",". "\"$cvsaddedfiles\", \"$cvsremovedfiles\", \"$cvsmodifiedfiles\",". - "\"$cvsusercommitlist\", \"$cvsuserupdatelist\")"); + "\"$cvsusercommitlist\", \"$cvsuserupdatelist\",". + "\"$a_file_size\", \"$o_file_size\")"); $d->execute; @@ -421,8 +431,8 @@ $olden_tests="" unless $olden_tests; my @OLDEN_TESTS = split $spliton, $singlesource_tests; -my $filesincvs = param('cvs_dir_count'); -my $dirsincvs = param('cvs_file_count'); +my $filesincvs = param('cvs_files_count'); +my $dirsincvs = param('cvs_dir_count'); my $loc = param('lines_of_code'); my $nickname = param('nickname'); my $cvscheckouttime_cpu=param('cvscheckouttime_cpu'); @@ -452,11 +462,9 @@ my $removed_tests=param('removed_tests'); my $gcc_version = param('gcc_version'); my $warnings = param('warnings'); -my $lines_of_code = param('lines_of_code'); -my $cvs_dir_count = param('cvs_file_count'); -my $cvs_file_count = param('cvs_dir_count'); -my $o_file_sizes = param('o_file_sizes'); -my $a_file_sizes = param('a_file_sizes'); +my $lines_of_code = param('lines_of_code'); +my $o_file_size = param('o_file_sizes'); +my $a_file_size = param('a_file_sizes'); ################################################################################ # @@ -571,7 +579,8 @@ $expfail_tests, $newly_passing_tests, $newly_failing_tests, $new_tests, $removed_tests, $cvsaddedfiles, $cvsremovedfiles, $cvsmodifiedfiles, - $cvsusercommitlist, $cvsuserupdatelist; + $cvsusercommitlist, $cvsuserupdatelist, $a_file_size, + $o_file_size; foreach $x(keys %singlesource_processed){ AddProgram $x, $singlesource_processed{$x}, "singlesource", $night_id; @@ -648,8 +657,8 @@ WriteFile "$build_file", $build_log; -WriteFile "$o_file", $o_file_sizes; -WriteFile "$a_file", $a_file_sizes; +WriteFile "$o_file", $o_file_size; +WriteFile "$a_file", $a_file_size; #WriteFile "$this_days_logs/$dejagnu_testrun_log_file",$dejagnutests_log; #WriteFile "$this_days_logs/$dejagnu_testrun_sum_file",$dejagnutests_sum; #WriteFile "$this_days_logs/$warnings_file",$buildwarnings;