Commit Graph

18574 Commits

Author SHA1 Message Date
Chris Lattner 4a454c80db new testcase for PR541
llvm-svn: 21702
2005-05-05 22:23:10 +00:00
Chris Lattner 1243e1c9f1 add support for undef values of opaque type, addressing PR541
llvm-svn: 21701
2005-05-05 22:21:19 +00:00
Chris Lattner 7ddaeb448b Add some extra checks. Opaque types don't have a null marker.
llvm-svn: 21700
2005-05-05 20:57:00 +00:00
Chris Lattner 2cc59a8066 new testcase
llvm-svn: 21699
2005-05-05 17:57:24 +00:00
Chris Lattner 7876156ba0 When hitting an unsupported intrinsic, actually print it
Lower debug info to noops.

llvm-svn: 21698
2005-05-05 17:55:17 +00:00
Andrew Lenharth 2dbbb3ab84 ctpop lowering in legalize
llvm-svn: 21697
2005-05-05 15:55:21 +00:00
Chris Lattner 807aa20f67 Fix a bug compimling Ruby, fixing this testcase:
LowerSetJmp/2005-05-05-OldUses.ll

llvm-svn: 21696
2005-05-05 15:47:43 +00:00
Chris Lattner fa58898845 new testcase for a bug Jim found
llvm-svn: 21695
2005-05-05 15:47:16 +00:00
Andrew Lenharth b8e94c3499 fix typo
llvm-svn: 21693
2005-05-04 19:25:37 +00:00
Andrew Lenharth aed06a0e92 Well, add support for ct* for 21264 only.
21164 is broken until expand works.

llvm-svn: 21692
2005-05-04 19:12:09 +00:00
Andrew Lenharth dd426dd04d Make promoteOp work for CT*
Proof?

ubyte %bar(ubyte %x) {
entry:
        %tmp.1 = call ubyte %llvm.ctlz( ubyte %x )
        ret ubyte %tmp.1
}

==>

zapnot $16,1,$0
CTLZ $0,$0
subq $0,56,$0
zapnot $0,1,$0
ret $31,($26),1

llvm-svn: 21691
2005-05-04 19:11:05 +00:00
Chris Lattner 809dfac421 Instcombine: cast (X != 0) to int, cast (X == 1) to int -> X iff X has only the low bit set.
This implements set.ll:test20.

This triggers 2x on povray, 9x on mesa, 11x on gcc, 2x on crafty, 1x on eon,
6x on perlbmk and 11x on m88ksim.

It allows us to compile these two functions into the same code:

struct s { unsigned int bit : 1; };
unsigned foo(struct s *p) {
  if (p->bit)
    return 1;
  else
    return 0;
}
unsigned bar(struct s *p) { return p->bit; }

llvm-svn: 21690
2005-05-04 19:10:26 +00:00
Chris Lattner 3538a4f6cc new testcase
llvm-svn: 21689
2005-05-04 19:05:02 +00:00
Reid Spencer 282d057485 Implement the IsDigitOptimization for simplifying calls to the isdigit
library function:
  isdigit(chr) -> 0 or 1 if chr is constant
  isdigit(chr) -> chr - '0' <= 9 otherwise

Although there are many calls to isdigit in llvm-test, most of them are
compiled away by macros leaving only this:

2 MultiSource/Applications/hexxagon

llvm-svn: 21688
2005-05-04 18:58:28 +00:00
Reid Spencer f9a4a9681d Make sure both optimization cases get tested.
llvm-svn: 21687
2005-05-04 17:45:10 +00:00
Reid Spencer 190bb26157 Add a test case for the IsDigitOptimization class.
llvm-svn: 21686
2005-05-04 17:34:55 +00:00
Andrew Lenharth 702859084b comment fix
llvm-svn: 21685
2005-05-04 15:56:34 +00:00
Andrew Lenharth dd9d3ac72b see if the legalize code propery compensates for the additional zeros introduced
llvm-svn: 21684
2005-05-04 15:51:07 +00:00
Reid Spencer e84ee1bcd0 Correct the descriptions of WHILE...END and RROT. Thanks to Lalo Martins
for pointing out these errors.

llvm-svn: 21683
2005-05-04 15:43:40 +00:00
Reid Spencer 7063d1aa71 WHILE does not "pop" a value, it "examines" to top of stack. Make this
clear in the applicable comment.

llvm-svn: 21682
2005-05-04 15:33:48 +00:00
Andrew Lenharth 6b551024ac added a use of ctpop to debug stuff with
llvm-svn: 21681
2005-05-04 15:20:16 +00:00
Andrew Lenharth 5be6f131e6 fixup argument
llvm-svn: 21680
2005-05-04 14:58:31 +00:00
Reid Spencer 1e520fd661 * Correct the function prototypes for some of the functions to match the
actual spec (int -> uint)
* Add the ability to get/cache the strlen function prototype.
* Make sure generated values are appropriately named for debugging purposes
* Add the SPrintFOptimiation for 4 casts of sprintf optimization:
    sprintf(str,cstr) -> llvm.memcpy(str,cstr) (if cstr has no %)
    sprintf(str,"")   -> store sbyte 0, str
    sprintf(str,"%s",src) -> llvm.memcpy(str,src) (if src is constant)
    sprintf(str,"%c",chr) -> store chr, str   ; store sbyte 0, str+1

The sprintf optimization didn't fire as much as I had hoped:

  2 MultiSource/Applications/SPASS
  5 MultiSource/Benchmarks/McCat/18-imp
 22 MultiSource/Benchmarks/Prolangs-C/TimberWolfMC
  1 MultiSource/Benchmarks/Prolangs-C/assembler
  6 MultiSource/Benchmarks/Prolangs-C/unix-smail
  2 MultiSource/Benchmarks/mediabench/mpeg2/mpeg2dec

llvm-svn: 21679
2005-05-04 03:20:21 +00:00
Misha Brukman 23e9f163ad Minor clean-ups
llvm-svn: 21678
2005-05-03 20:30:34 +00:00
Andrew Lenharth 1d463526b4 initial descriptions of count intrinsics
llvm-svn: 21677
2005-05-03 18:01:48 +00:00
Andrew Lenharth 5e177826fd Implement count leading zeros (ctlz), count trailing zeros (cttz), and count
population (ctpop).  Generic lowering is implemented, however only promotion
is implemented for SelectionDAG at the moment.

More coming soon.

llvm-svn: 21676
2005-05-03 17:19:30 +00:00
Reid Spencer f436286cf6 Fix this test to succeed even if "strchr" is on a call instruction.
llvm-svn: 21675
2005-05-03 17:09:38 +00:00
Reid Spencer a6bbd18023 Add a test case for SPrintFOptimization.
llvm-svn: 21674
2005-05-03 17:08:45 +00:00
Andrew Lenharth 38cc7bacb4 yea yea yea
llvm-svn: 21673
2005-05-03 17:00:48 +00:00
Andrew Lenharth 2e18c628c4 note the vararg change, and other stuff
llvm-svn: 21672
2005-05-03 16:59:09 +00:00
Andrew Lenharth bf50ff58ae pre add count tests
llvm-svn: 21671
2005-05-03 16:49:48 +00:00
Chris Lattner c22333348e fix a bug in the 1 index GEP handling code
llvm-svn: 21670
2005-05-03 16:44:45 +00:00
Reid Spencer 38cabd7265 Implement optimizations for the strchr and llvm.memset library calls.
Neither of these activated as many times as was hoped:

strchr:
9 MultiSource/Applications/siod
1 MultiSource/Applications/d
2 MultiSource/Prolangs-C/archie-client
1 External/SPEC/CINT2000/176.gcc/176.gcc

llvm.memset:
no hits

llvm-svn: 21669
2005-05-03 07:23:44 +00:00
Reid Spencer a064a84067 Add a test case for StrChrOptimizer for -simplify-libcalls
llvm-svn: 21668
2005-05-03 06:22:41 +00:00
Misha Brukman d317d937b2 Clean up and correct llvmc configurations for C and C++
llvm-svn: 21667
2005-05-03 06:13:18 +00:00
Misha Brukman 18aa1d6438 std::string(NULL) does not a proper constructor make
llvm-svn: 21666
2005-05-03 06:10:51 +00:00
Chris Lattner 8298120f17 add direct support for making GEP instrs with one index
llvm-svn: 21665
2005-05-03 05:43:30 +00:00
Misha Brukman cc42755633 Omit periods at the end of command-line switch explanations for consistency
llvm-svn: 21664
2005-05-03 05:36:14 +00:00
Reid Spencer d18dbcbf4c A new test case for the LLVMMemSetOptimization.
llvm-svn: 21663
2005-05-03 04:00:24 +00:00
Jeff Cohen 4e3aedeaa6 Use ANSI-approved way of getting the value infinity (otherwise VC++ won't compile it)
llvm-svn: 21662
2005-05-03 03:13:01 +00:00
Reid Spencer 95d8efdfcf Avoid garbage output in the statistics display by ensuring that the
strings passed to Statistic's constructor are not destructable. The stats
are printed during static destruction and the SimplifyLibCalls module was
getting destructed before the statistics.

llvm-svn: 21661
2005-05-03 02:54:54 +00:00
Reid Spencer 49fa070401 Add the StrNCmpOptimization which is similar to strcmp.
Unfortunately, this optimization didn't trigger on any llvm-test tests.

llvm-svn: 21660
2005-05-03 01:43:45 +00:00
Reid Spencer 8204531db1 Correct the title and the success criteria: strcmp -> strncmp
llvm-svn: 21659
2005-05-03 00:52:19 +00:00
Reid Spencer 0a23afbedb Add a new test case for the StrNCmpOptimization.
llvm-svn: 21658
2005-05-03 00:50:43 +00:00
Reid Spencer 2d5c7beebd Implement the fprintf optimization which converts calls like this:
fprintf(F,"hello") -> fwrite("hello",strlen("hello"),1,F)
  fprintf(F,"%s","hello") -> fwrite("hello",strlen("hello"),1,F)
  fprintf(F,"%c",'x') -> fputc('c',F)

This optimization fires severals times in llvm-test:

313 MultiSource/Applications/Burg
302 MultiSource/Benchmarks/Prolangs-C/TimberWolfMC
189 MultiSource/Benchmarks/Prolangs-C/mybison
175 MultiSource/Benchmarks/Prolangs-C/football
130 MultiSource/Benchmarks/Prolangs-C/unix-tbl

llvm-svn: 21657
2005-05-02 23:59:26 +00:00
Reid Spencer 59605a1b57 Add a test case for testing the FPrintFOptimization.
llvm-svn: 21656
2005-05-02 23:07:14 +00:00
Andrew Lenharth c73e633a41 fold fp div by 0 to inf, the way gcc does. This is legal according to the FP spec
llvm-svn: 21655
2005-05-02 21:25:47 +00:00
Andrew Lenharth f5d58d1bc3 Remove support for 1.0 style varargs
amusing of course, because we will have to go back to those semantics soon

llvm-svn: 21654
2005-05-02 19:07:27 +00:00
John Criswell f42ed7bdaf Fixed a comment.
llvm-svn: 21653
2005-05-02 14:47:42 +00:00
Duraid Madina 7acd5d5f06 support multiplication by constant negative integers
this constmul code is still buggy though, so beware. mul by 7427 is currently
broken, for example. will fix it when I get a moment :)

llvm-svn: 21652
2005-05-02 07:27:14 +00:00