69 lines · plain
1; RUN: llc -mtriple=thumb-eabi -mcpu=arm1156t2-s -mattr=+thumb2 %s -o - | FileCheck %s2 3define i64 @f1(i64 %a, i64 %b) {4; CHECK: f15; CHECK: subs r0, r0, r26 %tmp = sub i64 %a, %b7 ret i64 %tmp8}9 10; 734439407618 = 0x000000ab0000000211define i64 @f2(i64 %a) {12; CHECK: f213; CHECK: subs r0, #214; CHECK: sbc r1, r1, #17115 %tmp = sub i64 %a, 73443940761816 ret i64 %tmp17}18 19; 5066626890203138 = 0x001200120000000220define i64 @f3(i64 %a) {21; CHECK: f322; CHECK: subs r0, #223; CHECK: sbc r1, r1, #117966624 %tmp = sub i64 %a, 506662689020313825 ret i64 %tmp26}27 28; 3747052064576897026 = 0x340034000000000229define i64 @f4(i64 %a) {30; CHECK: f431; CHECK: subs r0, #232; CHECK: sbc r1, r1, #87242854433 %tmp = sub i64 %a, 374705206457689702634 ret i64 %tmp35}36 37; 6221254862626095106 = 0x565656560000000238define i64 @f5(i64 %a) {39; CHECK: f540; CHECK: subs r0, #241; CHECK: adc r1, r1, #-144849877542 %tmp = sub i64 %a, 622125486262609510643 ret i64 %tmp44}45 46; 287104476244869122 = 0x03fc00000000000247define i64 @f6(i64 %a) {48; CHECK: f649; CHECK: subs r0, #250; CHECK: sbc r1, r1, #6684672051 %tmp = sub i64 %a, 28710447624486912252 ret i64 %tmp53}54 55; Example from numerics code that manually computes wider-than-64 values.56;57; CHECK-LABEL: livecarry:58; CHECK: adds59; CHECK: adc60define i64 @livecarry(i64 %carry, i32 %digit) nounwind {61 %ch = lshr i64 %carry, 3262 %cl = and i64 %carry, 429496729563 %truncdigit = zext i32 %digit to i6464 %prod = add i64 %cl, %truncdigit65 %ph = lshr i64 %prod, 3266 %carryresult = add i64 %ch, %ph67 ret i64 %carryresult68}69