68 lines · plain
1; RUN: llc -mtriple=xcore < %s | FileCheck %s2 3; Only needs one ladd4define i64 @f1(i32 %x, i32 %y) nounwind {5entry: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]9 ret i64 %210}11; CHECK-LABEL: f1:12; CHECK: ldc r2, 013; CHECK-NEXT: ladd r1, r0, r1, r0, r214; CHECK-NEXT: retsp 015 16; Only needs one lsub and one neg17define i64 @f2(i32 %x, i32 %y) nounwind {18entry: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]22 ret i64 %223}24; CHECK-LABEL: f2:25; CHECK: ldc r2, 026; CHECK-NEXT: lsub r1, r0, r1, r0, r227; CHECK-NEXT: neg r1, r128; CHECK-NEXT: retsp 029 30; Should compile to one ladd and one add31define i64 @f3(i64 %x, i32 %y) nounwind {32entry:33 %0 = zext i32 %y to i64 ; <i64> [#uses=1]34 %1 = add i64 %x, %0 ; <i64> [#uses=1]35 ret i64 %136}37; CHECK-LABEL: f3:38; CHECK: ldc r3, 039; CHECK-NEXT: ladd r2, r0, r0, r2, r340; CHECK-NEXT: add r1, r1, r241; CHECK-NEXT: retsp 042 43; Should compile to one ladd and one add44define i64 @f4(i32 %x, i64 %y) nounwind {45entry:46 %0 = zext i32 %x to i64 ; <i64> [#uses=1]47 %1 = add i64 %0, %y ; <i64> [#uses=1]48 ret i64 %149}50; CHECK-LABEL: f4:51; CHECK: ldc r3, 052; CHECK-NEXT: ladd r1, r0, r0, r1, r353; CHECK-NEXT: add r1, r2, r154; CHECK-NEXT: retsp 055 56; Should compile to one lsub and one sub57define i64 @f5(i64 %x, i32 %y) nounwind {58entry:59 %0 = zext i32 %y to i64 ; <i64> [#uses=1]60 %1 = sub i64 %x, %0 ; <i64> [#uses=1]61 ret i64 %162}63; CHECK-LABEL: f5:64; CHECK: ldc r3, 065; CHECK-NEXT: lsub r2, r0, r0, r2, r366; CHECK-NEXT: sub r1, r1, r267; CHECK-NEXT: retsp 068