Instcombine: cast (X != 0) to int, cast (X == 1) to int -> X iff X has only the...
authorChris Lattner <sabre@nondot.org>
Wed, 4 May 2005 19:10:26 +0000 (19:10 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 4 May 2005 19:10:26 +0000 (19:10 +0000)
commit693787a5ec14eb523a9c4a7653a34f1ff7df7f3e
treefe250362fa305577b9593b3704592c80d9998e53
parent3a9a7701f0f935cf2db5aab11ac4b42a686cefe5
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; }

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21690 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/InstructionCombining.cpp