Commit Graph

227 Commits

Author SHA1 Message Date
Chris Lattner 3b18c1a946 Change DisambiguateGlobalSymbols to not rename asm globals, which breaks
bugpoint on leopard.

llvm-svn: 30150
2006-09-07 18:21:07 +00:00
Reid Spencer e4ca722199 For PR797:
Final removal of exceptions from lib/System and adjustment of users to
accommodate.

llvm-svn: 29846
2006-08-23 20:34:57 +00:00
Chris Lattner 34d26c38b2 wrap long line
llvm-svn: 28113
2006-05-04 23:35:31 +00:00
Chris Lattner 8dea0eca2f Fix printing of the instructions.
llvm-svn: 24714
2005-12-14 22:01:07 +00:00
Andrew Lenharth 312e65568c This solves the problem of the CBE renaming symbols that start with . but the assembly side still trying to reference them by their old names. Should be safe untill we hit a language front end that lets you specify such a name.
llvm-svn: 24626
2005-12-06 20:51:30 +00:00
Jeff Cohen 11e26b52b2 When a function takes a variable number of pointer arguments, with a zero
pointer marking the end of the list, the zero *must* be cast to the pointer
type.  An un-cast zero is a 32-bit int, and at least on x86_64, gcc will
not extend the zero to 64 bits, thus allowing the upper 32 bits to be
random junk.

The new END_WITH_NULL macro may be used to annotate a such a function
so that GCC (version 4 or newer) will detect the use of un-casted zero
at compile time.

llvm-svn: 23888
2005-10-23 04:37:20 +00:00
Chris Lattner bd615f518c If the user interrupts bugpoint, don't extract loops
llvm-svn: 22603
2005-08-02 23:25:56 +00:00
Chris Lattner beb01faea3 When the user hits ctrl-c, bugpoint should attempt to stop reduction as
quickly as possible and output what it has so far.  If they hit it twice,
bugpoint is killed.

llvm-svn: 22579
2005-08-02 02:16:17 +00:00
Jeff Cohen 5f4ef3c5a8 Eliminate all remaining tabs and trailing spaces.
llvm-svn: 22523
2005-07-27 06:12:32 +00:00
Chris Lattner 986675cb75 Fix PR576.
Instead of emitting a JIT stub that looks like this:

internal void %l1_main_entry_2E_ce_wrapper(int) {
header:
        %resolver = call sbyte* %getPointerToNamedFunction( sbyte* getelementptr ([20 x sbyte]* %l1_main_entry_2E_ce_name, int 0, int 0) )           ; <sbyte*> [#uses=1]
        %resolverCast = cast sbyte* %resolver to void (int)*            ; <void (int)*> [#uses=1]
        call void %resolverCast( int %0 )
        ret void
}

Emit one that looks like this:

internal void %l1_main_entry_2E_ce_wrapper(int) {
Entry:
	%fpcache = load void (int)** %l1_main_entry_2E_ce.fpcache               ; <void (int)*> [#uses=2]
        %isNull = seteq void (int)* %fpcache, null              ; <bool> [#uses=1]
        br bool %isNull, label %lookupfp, label %usecache

usecache:               ; preds = %lookupfp, %Entry
        %fp = phi void (int)* [ %resolverCast, %lookupfp ], [ %fpcache, %Entry ]            ; <void (int)*> [#uses=1]
        call void %fp( int %0 )
        ret void

lookupfp:               ; preds = %Entry
        %resolver = call sbyte* %getPointerToNamedFunction( sbyte* getelementptr ([20 x sbyte]* %l1_main_entry_2E_ce_name, int 0, int 0) )           ; <sbyte*> [#uses=1]
        %resolverCast = cast sbyte* %resolver to void (int)*            ; <void (int)*> [#uses=2]
        store void (int)* %resolverCast, void (int)** %l1_main_entry_2E_ce.fpcache
        br label %usecache
}


This makes the JIT debugger *MUCH* faster on large programs, as
getPointerToNamedFunction takes time linear with the size of the program, and
before we would call it every time a function in the text module was called from
the safe module (ouch!).

llvm-svn: 22387
2005-07-12 01:00:32 +00:00
Reid Spencer af48d8643d Final Changes For PR495:
This chagne just renames some sys::Path methods to ensure they are not
misused. The Path documentation now divides methods into two dimensions:
Path/Disk and accessor/mutator. Path accessors and mutators only operate
on the Path object itself without making any disk accesses. Disk accessors
and mutators will also access or modify the file system. Because of the
potentially destructive nature of disk mutators, it was decided that all
such methods should end in the work "Disk" to ensure the user recognizes
that the change will occur on the file system. This patch makes that
change. The method name changes are:

makeReadable        -> makeReadableOnDisk
makeWriteable       -> makeWriteableOnDisk
makeExecutable      -> makeExecutableOnDisk
setStatusInfo       -> setStatusInfoOnDisk
createDirectory     -> createDirectoryOnDisk
createFile          -> createFileOnDisk
createTemporaryFile -> createTemporaryFileOnDisk
destroy             -> eraseFromDisk
rename              -> renamePathOnDisk

These changes pass the Linux Deja Gnu tests.

llvm-svn: 22354
2005-07-08 03:08:58 +00:00
Reid Spencer c9c0473fa5 For PR495:
Get rid of the difference between file paths and directory paths. The Path
class now simply stores a path that can refer to either a file or a
directory. This required various changes in the implementation and interface
of the class with the corresponding impact to its users. Doxygen comments were
also updated to reflect these changes. Interface changes are:

appendDirectory -> appendComponent
appendFile -> appendComponent
elideDirectory -> eraseComponent
elideFile -> eraseComponent
elideSuffix -> eraseSuffix
renameFile -> rename
setDirectory -> set
setFile -> set

Changes pass Dejagnu and llvm-test/SingleSource tests.

llvm-svn: 22349
2005-07-07 23:21:43 +00:00
Chris Lattner 257008beff If loopextract breaks the program provide output so that we can repro the
problem.

llvm-svn: 21790
2005-05-08 21:54:56 +00:00
Jeff Cohen 88e7b7288a Eliminate tabs and trailing spaces
llvm-svn: 21441
2005-04-22 04:13:13 +00:00
Misha Brukman 650ba8eb56 Remove trailing whitespace
llvm-svn: 21428
2005-04-22 00:00:37 +00:00
Chris Lattner 22b216a59e Replace more a*'s with arg_*'s, thanks to Gabor Greif!
llvm-svn: 20615
2005-03-15 15:48:06 +00:00
Alkis Evlogimenos a67bafa568 Use arg_iterator and arg_begin and arg_end functions.
llvm-svn: 20608
2005-03-15 07:02:26 +00:00
Chris Lattner 0ce80cd542 Fix spelling, patch contributed by Gabor Greif!
llvm-svn: 20343
2005-02-27 06:18:25 +00:00
Chris Lattner ea2fa46f53 Improve output precision.
llvm-svn: 19564
2005-01-15 00:07:19 +00:00
Reid Spencer 584cb0a8c1 For PR351:
* removeFile() -> sys::Path::destroyFile()
* remove extraneous toString() calls
* convert local variables representing path names from std::string to
  sys::Path
* Use sys::Path objects with FileRemove instead of std::string
* Use sys::Path methods for construction of path names

llvm-svn: 19001
2004-12-16 23:04:20 +00:00
Reid Spencer 30067f1eac For PR351:
* Convert use of getUniqueFilename to sys::Path::makeUnique();

llvm-svn: 18949
2004-12-15 01:53:08 +00:00
Reid Spencer 0ebb926c0a LinkModules is now in the Linker class
llvm-svn: 18863
2004-12-13 03:01:03 +00:00
Chris Lattner dad1823703 Fix a bug in the checkin where I adjusted this code to work when
LinkModules nukes the second module argument.

llvm-svn: 17986
2004-11-19 07:09:40 +00:00
Chris Lattner d308797cae Make this code not depend on LinkModules leaving the second argument unmolested.
llvm-svn: 17874
2004-11-16 06:31:38 +00:00
Reid Spencer 16c3bb3198 Linker.h has a new home.
llvm-svn: 17801
2004-11-14 23:00:08 +00:00
Reid Spencer 7c16caa336 Changes For Bug 352
Move include/Config and include/Support into include/llvm/Config,
include/llvm/ADT and include/llvm/Support. From here on out, all LLVM
public header files must be under include/llvm/.

llvm-svn: 16137
2004-09-01 22:55:40 +00:00
Misha Brukman 6aa3c83f8d * Convert "\n" -> '\n'
* Print out another '\n' after printing out program execution status
* Make sure code wraps at 80 cols

llvm-svn: 15123
2004-07-23 01:30:49 +00:00
Reid Spencer cb3fb5d4f5 bug 122:
- Replace ConstantPointerRef usage with GlobalValue usage

llvm-svn: 14953
2004-07-18 00:44:37 +00:00
Misha Brukman 28ee8f0f30 Linker.h moved to include/llvm/Support
llvm-svn: 14351
2004-06-23 17:33:09 +00:00
Chris Lattner 5f49573cf6 Turn the block extractor on by default now that it basically works, eliminating the option.
llvm-svn: 13502
2004-05-12 19:02:44 +00:00
Chris Lattner 6c0c313daf Check to see if all blocks are extractible first.
llvm-svn: 13491
2004-05-12 16:08:01 +00:00
Chris Lattner 49e4a33c98 Implement the final missing bits for block extractor support. Now bugpoint
can extract basic blocks up to the limit of the block extractor implementation.

llvm-svn: 13475
2004-05-12 02:43:24 +00:00
Chris Lattner a060b10ee5 Implement basic block extraction for the miscompilation debugger. This still needs
two things: the FIXME in ExtractBlocks needs to be implemented, and the basic block
extractor itself needs to have enough bugs fixed for this to be more or less
useful.

Until the time that this is generally useful, it is hidden behind the new bugpoint
-enable-block-extraction option.  I hope to get the FIXME done tonight.

Also of note, this patch adds a -extract-bbs option to bugpoint which can be used
to debug the block extractor.  (hint hint Misha :)

llvm-svn: 13471
2004-05-11 21:54:13 +00:00
Chris Lattner 02cea4afd3 Teach bugpoint to be a little bit smarter and avoid repeating work
llvm-svn: 13132
2004-04-23 20:36:51 +00:00
Misha Brukman 324e9e06d8 Add a space before result for readability on the command line.
llvm-svn: 13109
2004-04-22 20:02:09 +00:00
Misha Brukman 0784a601c2 Add doxygenified comments to functions.
llvm-svn: 13097
2004-04-21 18:36:43 +00:00
Misha Brukman ce89b392c6 As per Chris, greatly simplify handling of external functions by using the
wrapper idea uniformly: we can use Value::replaceAllUsesWith() instead of
special-casing by class of user.

llvm-svn: 13063
2004-04-19 03:36:47 +00:00
Misha Brukman 8301864215 Finally implement rewriting global initializers which use external functions
by creating an internal wrapper function with same signature as the external
function, and use it instead of the "real" function.

The wrapper then calls the external function using the same JIT function
resolution API that has been used before for rewriting instructions, since the
wrapper has an explicit call instruction which we can rewrite.

llvm-svn: 13054
2004-04-19 01:12:01 +00:00
Chris Lattner dfbb1d1cfe Disambiguate symbols after loop extraction so that we can diagnose a code
generator bug if multiple loops are extracted from a function.

llvm-svn: 12847
2004-04-11 23:52:35 +00:00
Chris Lattner 5bcb4eb13c Fix an obvious bug in the refactoring I did a few days ago
llvm-svn: 12797
2004-04-09 22:28:33 +00:00
Chris Lattner bf791614ed Merge the code generator miscompilation code into the optimizer miscompilation
code.  This "instantly" gives us loop-extractor power to assist with the
debugment of our nasty codegen issues.  :)

llvm-svn: 12678
2004-04-05 22:58:16 +00:00
Chris Lattner 0434ba3ed0 Refactor and genericize code
llvm-svn: 12675
2004-04-05 21:37:38 +00:00
Chris Lattner bcf2623cab minor formatting change
llvm-svn: 12606
2004-04-02 06:32:45 +00:00
Chris Lattner a413b08580 Fix two pretty serious bugs:
1. Each time the loop extractor extracted a loop, we would leak a module.
  2. When we extracted a loop, we didn't add the new function to the list of
     miscompiled functions.  Thus if the bug was in a loop nest and we
     extracted it, we could actually *LOSE THE BUG*, which is very bad.

With these patches, bugpoint has successfully found a bug for me in a function
with several nested loops, and cut it down to just one of them. :) :)

llvm-svn: 12605
2004-04-02 06:32:17 +00:00
Chris Lattner b38cc9c026 When loop extraction succeeds, make sure to map the function pointers over
to avoid dangling references.

llvm-svn: 12470
2004-03-17 17:42:09 +00:00
Chris Lattner 8726ebd326 Fix thinko, and PR292
llvm-svn: 12426
2004-03-16 01:51:54 +00:00
Chris Lattner bcec7875fb After reducing a miscompiled program down to the functions which are being
miscompiled, try to use the loop extractor to reduce the program down to a
loop nest that is being miscompiled.  In practice, the loop extractor appears
to have too many bugs for this to be useful, but hopefully they will be fixed
soon...

llvm-svn: 12398
2004-03-14 22:08:00 +00:00
Chris Lattner fd72bed301 Refactor and clean up a bunch more code. No major functionality changes.
* Make several methods of bugdriver global functions (ParseInputFile, PrintFunctionList)
 * Make PrintFunctionList truncate the output after 10 entries, like the crash debugger
   did.  This allows code sharing.
 * Add a couple of methods to BugDriver that allows us to eliminate some friends
 * Improve comments in ExtractFunction.cpp
 * Make classes that used to be friends up bugdriver now live in anon namespaces
 * Rip a bunch of functionality in the miscompilation tester into a new
   TestMergedProgram function for future code sharing.
 * Fix a bug in the miscompilation tester induced in my last checkin

llvm-svn: 12393
2004-03-14 20:50:42 +00:00
Chris Lattner 567543f09e Refactor all of the "splitting a module into two pieces" code to avoid
code duplication.  Also, don't use ReduceMiscompilingFunctions::TestFuncs
to print out the final message.

llvm-svn: 12387
2004-03-14 19:27:19 +00:00
Chris Lattner 1942f98d80 A couple of minor cleanups: don't forward declare private classes, put private
classes in an anon namespace

llvm-svn: 11604
2004-02-18 21:29:46 +00:00
Chris Lattner ead1dff00b Add a stub for debugging code generator crashes
llvm-svn: 11602
2004-02-18 21:02:04 +00:00
Chris Lattner 2f1aa118a4 finegrainify namespacification
llvm-svn: 10839
2004-01-14 03:38:37 +00:00
Chris Lattner 69d47e7314 Bugpoint had appalingly bad grammar. Fix some of it.
llvm-svn: 10308
2003-12-07 02:43:09 +00:00
Brian Gaeke 960707c335 Put all LLVM code into the llvm namespace, as per bug 109.
llvm-svn: 9903
2003-11-11 22:41:34 +00:00
Chris Lattner ebec8030d6 fix file headers
llvm-svn: 9293
2003-10-20 17:57:13 +00:00
John Criswell 09344dcf97 Added copyright header to all C++ source files.
llvm-svn: 9291
2003-10-20 17:47:21 +00:00
Chris Lattner bb831b9cf9 If we detect a pass crash during miscompilation testing, immediately enter the
crash debugger

llvm-svn: 9234
2003-10-18 19:27:48 +00:00
Chris Lattner 54cbc41d05 Fix bug in my checkin
llvm-svn: 9217
2003-10-18 00:14:13 +00:00
Chris Lattner ea48572a80 Another formatting fix
llvm-svn: 9216
2003-10-18 00:05:05 +00:00
Chris Lattner 92a9f7adc4 More cleanups
llvm-svn: 9215
2003-10-17 23:07:47 +00:00
Chris Lattner 7d147aec11 Be more helpful if a pass fails while chasing down a miscompilation
llvm-svn: 9214
2003-10-17 23:03:16 +00:00
Chris Lattner 2ed0642a95 Eliminate the bugpoint -mode option, by making bugpoint automatically infer the root of all of your problems
llvm-svn: 9115
2003-10-14 20:52:55 +00:00
Misha Brukman 1b7a238f3f File-related functions moved to FileUtilities.h .
llvm-svn: 7696
2003-08-07 21:42:28 +00:00
Misha Brukman 0c2305b110 Re-grouped and alphabetized headers for easier reading and cleaner style.
llvm-svn: 7689
2003-08-07 21:19:30 +00:00
Misha Brukman e722e4ea49 Moved SystemUtils.h to include/Support and SystemUtils.cpp to lib/Support.
llvm-svn: 7687
2003-08-07 21:04:42 +00:00
Misha Brukman 4aad821408 Do not attempt to reduce a test case if it is an empty set.
llvm-svn: 7570
2003-08-04 19:03:42 +00:00
Misha Brukman 87154fdbc0 CodeGeneratorBug.cpp:
* Temporarily externing InputArgv to print it out for the benefit of LLI command
  needed to reproduce the result.
* Print out the list of functions currently being tested
* ListReducer now returns a bool if there was a failure, so test for it

ListReducer.h:
* Handle the case where there is no problem by returning true if failure is
  found. Also correctly handles the case when there is only 1 pass/function.

Miscompilation.cpp:
* ListReducer now returns a bool if there was a failure, so test for it

llvm-svn: 7434
2003-07-30 20:15:56 +00:00
Misha Brukman d792c9bb46 Major addition to bugpoint: ability to debug code generators (LLC and LLI).
The C backend is assumed correct and is used to generate shared objects to be
loaded by the other two code generators.

LLC debugging should be functional now, LLI needs a few more additions to work,
the major one is renaming of external functions to call the JIT lazy function
resolver.

Bugpoint now has a command-line switch -mode with options 'compile' and
'codegen' to debug appropriate portions of tools.

ExecutionDriver.cpp: Added implementations of AbstractInterpreter for LLC and
GCC, broke out common code within other tools, and added ability to generate C
code with CBE individually, without executing the program, and the GCC tool can
generate executables shared objects or executables.

If no reference output is specified to Bugpoint, it will be generated with CBE,
because it is already assumed to be correct for the purposes of debugging using
this method. As a result, many functions now accept as an optional parameter a
shared object to be loaded in, if specified.

llvm-svn: 7293
2003-07-24 18:17:43 +00:00
Misha Brukman 7fdaab4f68 The word `separate' only has one `e'.
llvm-svn: 7173
2003-07-14 17:20:40 +00:00
Chris Lattner a95548f56c Print filename correctly
llvm-svn: 6119
2003-05-12 14:32:04 +00:00
Chris Lattner 4a1a9d2cdd Rename Kept -> Suffix
Fix problem where we accidentally returned KeepPrefix instead of KeepSuffix!

llvm-svn: 5925
2003-04-25 03:16:05 +00:00
Chris Lattner ba159e2824 Adjust to match new ListReducer interface
Move function to generic code

llvm-svn: 5910
2003-04-24 22:24:22 +00:00
Chris Lattner 9f5a197eb6 Move the ListReducer Class into it's own header file instead of living in Miscompilation.cpp
llvm-svn: 5907
2003-04-24 20:16:29 +00:00
Chris Lattner b052843bd2 Allow bugpoint to try new an different methods for pruning down lists
llvm-svn: 5905
2003-04-24 19:32:42 +00:00
Chris Lattner 16a413103c Implement support for bugpoint to identify which FUNCTION an optimization
is miscompiling.

llvm-svn: 5893
2003-04-24 17:02:17 +00:00
Chris Lattner 1b35bee37c Print where reference output goes
llvm-svn: 5891
2003-04-23 20:41:18 +00:00
Chris Lattner de4aa4cf8c New files for miscompilation detection
llvm-svn: 5120
2002-12-23 23:50:16 +00:00