[AArch64] Fix bug in prolog clobbering live reg when shrink wrapping.
[oota-llvm.git] / test / CodeGen / AArch64 / eon.ll
1 ; RUN: llc -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s
2
3 ; Check that the eon instruction is generated instead of eor,movn
4 define i64 @test1(i64 %a, i64 %b, i64 %c) {
5 ; CHECK-LABEL: test1:
6 ; CHECK: eon
7 ; CHECK: ret
8 entry:
9   %shl = shl i64 %b, 4
10   %neg = xor i64 %a, -1
11   %xor = xor i64 %shl, %neg
12   ret i64 %xor
13 }
14
15 ; Same check with mutliple uses of %neg
16 define i64 @test2(i64 %a, i64 %b, i64 %c) {
17 ; CHECK-LABEL: test2:
18 ; CHECK: eon
19 ; CHECK: eon
20 ; CHECK: lsl
21 ; CHECK: ret
22 entry:
23   %shl = shl i64 %b, 4
24   %neg = xor i64 %shl, -1
25   %xor = xor i64 %neg, %a
26   %xor1 = xor i64 %c, %neg
27   %shl2 = shl i64 %xor, %xor1
28   ret i64 %shl2
29 }