1 ; RUN: llvm-as < %s | llc -march=xcore | FileCheck %s
4 define i64 @f1(i32 %x, i32 %y) nounwind {
6 %0 = zext i32 %x to i64 ; <i64> [#uses=1]
7 %1 = zext i32 %y to i64 ; <i64> [#uses=1]
8 %2 = add i64 %1, %0 ; <i64> [#uses=1]
13 ; CHECK-NEXT: ladd r1, r0, r1, r0, r2
16 ; Only needs one lsub and one neg
17 define i64 @f2(i32 %x, i32 %y) nounwind {
19 %0 = zext i32 %x to i64 ; <i64> [#uses=1]
20 %1 = zext i32 %y to i64 ; <i64> [#uses=1]
21 %2 = sub i64 %1, %0 ; <i64> [#uses=1]
26 ; CHECK-NEXT: lsub r1, r0, r1, r0, r2
27 ; CHECK-NEXT: neg r1, r1
30 ; Should compile to one ladd and one add
31 define i64 @f3(i64 %x, i32 %y) nounwind {
33 %0 = zext i32 %y to i64 ; <i64> [#uses=1]
34 %1 = add i64 %x, %0 ; <i64> [#uses=1]
39 ; CHECK-NEXT: ladd r2, r0, r0, r2, r3
40 ; CHECK-NEXT: add r1, r1, r2
43 ; Should compile to one ladd and one add
44 define i64 @f4(i32 %x, i64 %y) nounwind {
46 %0 = zext i32 %x to i64 ; <i64> [#uses=1]
47 %1 = add i64 %0, %y ; <i64> [#uses=1]
52 ; CHECK-NEXT: ladd r1, r0, r0, r1, r3
53 ; CHECK-NEXT: add r1, r2, r1
56 ; Should compile to one lsub and one sub
57 define i64 @f5(i64 %x, i32 %y) nounwind {
59 %0 = zext i32 %y to i64 ; <i64> [#uses=1]
60 %1 = sub i64 %x, %0 ; <i64> [#uses=1]
65 ; CHECK-NEXT: lsub r2, r0, r0, r2, r3
66 ; CHECK-NEXT: sub r1, r1, r2