Dan Gohman | 36a0947 | 2009-09-08 23:54:48 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=x86 | \ |
Dan Gohman | 28beeea | 2007-08-15 13:36:28 +0000 | [diff] [blame] | 2 | ; RUN: grep {s\[ah\]\[rl\]l} | count 1 |
Chris Lattner | bd8b13d | 2005-05-09 17:09:31 +0000 | [diff] [blame] | 3 | |
Chris Lattner | 2831a19 | 2010-10-01 05:36:09 +0000 | [diff] [blame] | 4 | define i32* @test1(i32* %P, i32 %X) nounwind { |
Tanya Lattner | 33eefff | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 5 | %Y = lshr i32 %X, 2 ; <i32> [#uses=1] |
| 6 | %gep.upgrd.1 = zext i32 %Y to i64 ; <i64> [#uses=1] |
| 7 | %P2 = getelementptr i32* %P, i64 %gep.upgrd.1 ; <i32*> [#uses=1] |
| 8 | ret i32* %P2 |
Chris Lattner | bd8b13d | 2005-05-09 17:09:31 +0000 | [diff] [blame] | 9 | } |
| 10 | |
Chris Lattner | 2831a19 | 2010-10-01 05:36:09 +0000 | [diff] [blame] | 11 | define i32* @test2(i32* %P, i32 %X) nounwind { |
Tanya Lattner | 33eefff | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 12 | %Y = shl i32 %X, 2 ; <i32> [#uses=1] |
| 13 | %gep.upgrd.2 = zext i32 %Y to i64 ; <i64> [#uses=1] |
| 14 | %P2 = getelementptr i32* %P, i64 %gep.upgrd.2 ; <i32*> [#uses=1] |
| 15 | ret i32* %P2 |
Chris Lattner | bd8b13d | 2005-05-09 17:09:31 +0000 | [diff] [blame] | 16 | } |
| 17 | |
Chris Lattner | 2831a19 | 2010-10-01 05:36:09 +0000 | [diff] [blame] | 18 | define i32* @test3(i32* %P, i32 %X) nounwind { |
Tanya Lattner | 33eefff | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 19 | %Y = ashr i32 %X, 2 ; <i32> [#uses=1] |
| 20 | %P2 = getelementptr i32* %P, i32 %Y ; <i32*> [#uses=1] |
| 21 | ret i32* %P2 |
Chris Lattner | bd8b13d | 2005-05-09 17:09:31 +0000 | [diff] [blame] | 22 | } |
Tanya Lattner | 33eefff | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 23 | |
Dan Gohman | 4e39e9d | 2010-06-24 14:30:44 +0000 | [diff] [blame] | 24 | define fastcc i32 @test4(i32* %d) nounwind { |
| 25 | %tmp4 = load i32* %d |
| 26 | %tmp512 = lshr i32 %tmp4, 24 |
| 27 | ret i32 %tmp512 |
| 28 | } |