blob: a245ed7caa8417d9b2dbaa3c3fd0d8fd316bd900 [file] [log] [blame]
Dan Gohman1b733ae2010-01-04 20:53:54 +00001;; X's live range extends beyond the shift, so the register allocator
2;; cannot coalesce it with Y. Because of this, a copy needs to be
3;; emitted before the shift to save the register value before it is
4;; clobbered. However, this copy is not needed if the register
5;; allocator turns the shift into an LEA. This also occurs for ADD.
6
7; Check that the shift gets turned into an LEA.
8; RUN: llc < %s -march=x86 -x86-asm-syntax=intel | \
9; RUN: not grep {mov E.X, E.X}
10
11@G = external global i32 ; <i32*> [#uses=3]
12
13define i32 @test1(i32 %X, i32 %Y) {
14 %Z = add i32 %X, %Y ; <i32> [#uses=1]
15 volatile store i32 %Y, i32* @G
16 volatile store i32 %Z, i32* @G
17 ret i32 %X
18}
19
20define i32 @test2(i32 %X) {
21 %Z = add i32 %X, 1 ; <i32> [#uses=1]
22 volatile store i32 %Z, i32* @G
23 ret i32 %X
24}