Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 1 | ; The register allocator can commute two-address instructions to avoid |
| 2 | ; insertion of register-register copies. |
| 3 | |
| 4 | ; Make sure there are only 3 mov's for each testcase |
Tanya Lattner | 632e88a | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 5 | ; RUN: llvm-as < %s | llc -march=x86 -x86-asm-syntax=intel | \ |
Dan Gohman | 8c89a50 | 2007-08-15 13:36:28 +0000 | [diff] [blame] | 6 | ; RUN: grep {\\\<mov\\\>} | count 6 |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 7 | |
| 8 | |
| 9 | target triple = "i686-pc-linux-gnu" |
Tanya Lattner | 632e88a | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 10 | @G = external global i32 ; <i32*> [#uses=2] |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 11 | |
Tanya Lattner | 632e88a | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 12 | declare void @ext(i32) |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 13 | |
Tanya Lattner | 632e88a | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 14 | define i32 @add_test(i32 %X, i32 %Y) { |
| 15 | %Z = add i32 %X, %Y ; <i32> [#uses=1] |
| 16 | store i32 %Z, i32* @G |
| 17 | ret i32 %X |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 18 | } |
| 19 | |
Tanya Lattner | 632e88a | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 20 | define i32 @xor_test(i32 %X, i32 %Y) { |
| 21 | %Z = xor i32 %X, %Y ; <i32> [#uses=1] |
| 22 | store i32 %Z, i32* @G |
| 23 | ret i32 %X |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 24 | } |
Tanya Lattner | 632e88a | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 25 | |