Dan Gohman | fce288f | 2009-09-09 00:09:15 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s |
Tanya Lattner | 2393a24 | 2004-11-06 23:08:26 +0000 | [diff] [blame] | 2 | |
Vikram S. Adve | 6781cd2 | 2003-07-10 19:31:26 +0000 | [diff] [blame] | 3 | ;; Date: Jul 8, 2003. |
| 4 | ;; From: test/Programs/MultiSource/Olden-perimeter |
| 5 | ;; Function: int %adj(uint %d.1, uint %ct.1) |
| 6 | ;; |
| 7 | ;; Errors: (1) cast-int-to-bool was being treated as a NOP (i.e., the int |
| 8 | ;; register was treated as effectively true if non-zero). |
| 9 | ;; This cannot be used for later boolean operations. |
| 10 | ;; (2) (A or NOT(B)) was being folded into A orn B, which is ok |
| 11 | ;; for bitwise operations but not booleans! For booleans, |
| 12 | ;; the result has to be compared with 0. |
Vikram S. Adve | f2e343b | 2003-07-08 15:39:02 +0000 | [diff] [blame] | 13 | |
Tanya Lattner | 53a66d1 | 2008-02-19 01:41:04 +0000 | [diff] [blame] | 14 | @.str_1 = internal constant [30 x i8] c"d = %d, ct = %d, d ^ ct = %d\0A\00" |
Vikram S. Adve | f2e343b | 2003-07-08 15:39:02 +0000 | [diff] [blame] | 15 | |
Tanya Lattner | 53a66d1 | 2008-02-19 01:41:04 +0000 | [diff] [blame] | 16 | declare i32 @printf(i8*, ...) |
Vikram S. Adve | f2e343b | 2003-07-08 15:39:02 +0000 | [diff] [blame] | 17 | |
Tanya Lattner | 53a66d1 | 2008-02-19 01:41:04 +0000 | [diff] [blame] | 18 | define i32 @adj(i32 %d.1, i32 %ct.1) { |
Vikram S. Adve | f2e343b | 2003-07-08 15:39:02 +0000 | [diff] [blame] | 19 | entry: |
Tanya Lattner | 53a66d1 | 2008-02-19 01:41:04 +0000 | [diff] [blame] | 20 | %tmp.19 = icmp eq i32 %ct.1, 2 ; <i1> [#uses=1] |
| 21 | %tmp.22.not = trunc i32 %ct.1 to i1 ; <i1> [#uses=1] |
| 22 | %tmp.221 = xor i1 %tmp.22.not, true ; <i1> [#uses=1] |
| 23 | %tmp.26 = or i1 %tmp.19, %tmp.221 ; <i1> [#uses=1] |
| 24 | %tmp.27 = zext i1 %tmp.26 to i32 ; <i32> [#uses=1] |
| 25 | ret i32 %tmp.27 |
Vikram S. Adve | f2e343b | 2003-07-08 15:39:02 +0000 | [diff] [blame] | 26 | } |
| 27 | |
Tanya Lattner | 53a66d1 | 2008-02-19 01:41:04 +0000 | [diff] [blame] | 28 | define i32 @main() { |
Vikram S. Adve | f2e343b | 2003-07-08 15:39:02 +0000 | [diff] [blame] | 29 | entry: |
Tanya Lattner | 53a66d1 | 2008-02-19 01:41:04 +0000 | [diff] [blame] | 30 | %result = call i32 @adj( i32 3, i32 2 ) ; <i32> [#uses=1] |
| 31 | %tmp.0 = call i32 (i8*, ...)* @printf( i8* getelementptr ([30 x i8]* @.str_1, i64 0, i64 0), i32 3, i32 2, i32 %result ) ; <i32> [#uses=0] |
| 32 | ret i32 0 |
Vikram S. Adve | f2e343b | 2003-07-08 15:39:02 +0000 | [diff] [blame] | 33 | } |
Tanya Lattner | 53a66d1 | 2008-02-19 01:41:04 +0000 | [diff] [blame] | 34 | |