| Chris Lattner | e600cec | 2003-11-03 05:30:34 +0000 | [diff] [blame] | 1 | ; This tests for various complex cast elimination cases instcombine should |
| 2 | ; handle. |
| Chris Lattner | 593a74a | 2002-08-12 19:18:49 +0000 | [diff] [blame] | 3 | |
| Chris Lattner | c77d24b | 2009-11-07 19:11:46 +0000 | [diff] [blame] | 4 | target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" |
| 5 | |
| Edward O'Callaghan | cbf75a5 | 2009-10-12 07:18:14 +0000 | [diff] [blame] | 6 | ; RUN: opt < %s -instcombine -S | FileCheck %s |
| Chris Lattner | 4b474fc56 | 2002-05-15 17:22:01 +0000 | [diff] [blame] | 7 | |
| Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 8 | define i1 @test1(i32 %X) { |
| 9 | %A = bitcast i32 %X to i32 ; <i32> [#uses=1] |
| 10 | ; Convert to setne int %X, 12 |
| 11 | %c = icmp ne i32 %A, 12 ; <i1> [#uses=1] |
| 12 | ret i1 %c |
| Edward O'Callaghan | cbf75a5 | 2009-10-12 07:18:14 +0000 | [diff] [blame] | 13 | ; CHECK: %c = icmp ne i32 %X, 12 |
| 14 | ; CHECK: ret i1 %c |
| Chris Lattner | 4b474fc56 | 2002-05-15 17:22:01 +0000 | [diff] [blame] | 15 | } |
| 16 | |
| Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 17 | define i1 @test2(i32 %X, i32 %Y) { |
| 18 | %A = bitcast i32 %X to i32 ; <i32> [#uses=1] |
| 19 | %B = bitcast i32 %Y to i32 ; <i32> [#uses=1] |
| 20 | ; Convert to setne int %X, %Y |
| 21 | %c = icmp ne i32 %A, %B ; <i1> [#uses=1] |
| 22 | ret i1 %c |
| Edward O'Callaghan | cbf75a5 | 2009-10-12 07:18:14 +0000 | [diff] [blame] | 23 | ; CHECK: %c = icmp ne i32 %X, %Y |
| 24 | ; CHECK: ret i1 %c |
| Chris Lattner | 4b474fc56 | 2002-05-15 17:22:01 +0000 | [diff] [blame] | 25 | } |
| 26 | |
| Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 27 | define i32 @test4(i32 %A) { |
| 28 | %B = bitcast i32 %A to i32 ; <i32> [#uses=1] |
| 29 | %C = shl i32 %B, 2 ; <i32> [#uses=1] |
| 30 | %D = bitcast i32 %C to i32 ; <i32> [#uses=1] |
| 31 | ret i32 %D |
| Edward O'Callaghan | cbf75a5 | 2009-10-12 07:18:14 +0000 | [diff] [blame] | 32 | ; CHECK: %C = shl i32 %A, 2 |
| 33 | ; CHECK: ret i32 %C |
| Chris Lattner | 1d48528 | 2003-03-05 22:50:55 +0000 | [diff] [blame] | 34 | } |
| 35 | |
| Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 36 | define i16 @test5(i16 %A) { |
| 37 | %B = sext i16 %A to i32 ; <i32> [#uses=1] |
| 38 | %C = and i32 %B, 15 ; <i32> [#uses=1] |
| 39 | %D = trunc i32 %C to i16 ; <i16> [#uses=1] |
| 40 | ret i16 %D |
| Edward O'Callaghan | cbf75a5 | 2009-10-12 07:18:14 +0000 | [diff] [blame] | 41 | ; CHECK: %C = and i16 %A, 15 |
| 42 | ; CHECK: ret i16 %C |
| Chris Lattner | 14f7522 | 2003-07-23 23:21:08 +0000 | [diff] [blame] | 43 | } |
| Chris Lattner | c75cfac | 2003-11-03 03:51:26 +0000 | [diff] [blame] | 44 | |
| Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 45 | define i1 @test6(i1 %A) { |
| 46 | %B = zext i1 %A to i32 ; <i32> [#uses=1] |
| 47 | %C = icmp ne i32 %B, 0 ; <i1> [#uses=1] |
| 48 | ret i1 %C |
| Edward O'Callaghan | cbf75a5 | 2009-10-12 07:18:14 +0000 | [diff] [blame] | 49 | ; CHECK: ret i1 %A |
| Chris Lattner | c75cfac | 2003-11-03 03:51:26 +0000 | [diff] [blame] | 50 | } |
| Chris Lattner | efde768 | 2003-11-03 03:52:34 +0000 | [diff] [blame] | 51 | |
| Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 52 | define i1 @test6a(i1 %A) { |
| 53 | %B = zext i1 %A to i32 ; <i32> [#uses=1] |
| 54 | %C = icmp ne i32 %B, -1 ; <i1> [#uses=1] |
| 55 | ret i1 %C |
| Edward O'Callaghan | cbf75a5 | 2009-10-12 07:18:14 +0000 | [diff] [blame] | 56 | ; CHECK: ret i1 true |
| Chris Lattner | 11bea4f | 2003-11-03 05:08:53 +0000 | [diff] [blame] | 57 | } |
| 58 | |
| Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 59 | define i1 @test7(i8* %A) { |
| 60 | %B = bitcast i8* %A to i32* ; <i32*> [#uses=1] |
| 61 | %C = icmp eq i32* %B, null ; <i1> [#uses=1] |
| 62 | ret i1 %C |
| Edward O'Callaghan | cbf75a5 | 2009-10-12 07:18:14 +0000 | [diff] [blame] | 63 | ; CHECK: %C = icmp eq i8* %A, null |
| 64 | ; CHECK: ret i1 %C |
| Chris Lattner | efde768 | 2003-11-03 03:52:34 +0000 | [diff] [blame] | 65 | } |