1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=bpfel | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @add(i16* nocapture %a, i16 zeroext %n) nounwind readonly { 4*9880d681SAndroid Build Coastguard Workerentry: 5*9880d681SAndroid Build Coastguard Worker %cmp8 = icmp eq i16 %n, 0 ; <i1> [#uses=1] 6*9880d681SAndroid Build Coastguard Worker br i1 %cmp8, label %for.end, label %for.body 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body, %entry 9*9880d681SAndroid Build Coastguard Worker %i.010 = phi i16 [ 0, %entry ], [ %inc, %for.body ] ; <i16> [#uses=2] 10*9880d681SAndroid Build Coastguard Worker %sum.09 = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] 11*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr i16, i16* %a, i16 %i.010 ; <i16*> [#uses=1] 12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add: 13*9880d681SAndroid Build Coastguard Worker; CHECK: add r{{[0-9]+}}, r{{[0-9]+}} 14*9880d681SAndroid Build Coastguard Worker %tmp4 = load i16, i16* %arrayidx ; <i16> [#uses=1] 15*9880d681SAndroid Build Coastguard Worker %add = add i16 %tmp4, %sum.09 ; <i16> [#uses=2] 16*9880d681SAndroid Build Coastguard Worker %inc = add i16 %i.010, 1 ; <i16> [#uses=2] 17*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i16 %inc, %n ; <i1> [#uses=1] 18*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.end, label %for.body 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 21*9880d681SAndroid Build Coastguard Worker %sum.0.lcssa = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] 22*9880d681SAndroid Build Coastguard Worker ret i16 %sum.0.lcssa 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @sub(i16* nocapture %a, i16 zeroext %n) nounwind readonly { 26*9880d681SAndroid Build Coastguard Workerentry: 27*9880d681SAndroid Build Coastguard Worker %cmp8 = icmp eq i16 %n, 0 ; <i1> [#uses=1] 28*9880d681SAndroid Build Coastguard Worker br i1 %cmp8, label %for.end, label %for.body 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body, %entry 31*9880d681SAndroid Build Coastguard Worker %i.010 = phi i16 [ 0, %entry ], [ %inc, %for.body ] ; <i16> [#uses=2] 32*9880d681SAndroid Build Coastguard Worker %sum.09 = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] 33*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr i16, i16* %a, i16 %i.010 ; <i16*> [#uses=1] 34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sub: 35*9880d681SAndroid Build Coastguard Worker; CHECK: sub r{{[0-9]+}}, r{{[0-9]+}} 36*9880d681SAndroid Build Coastguard Worker %tmp4 = load i16, i16* %arrayidx ; <i16> [#uses=1] 37*9880d681SAndroid Build Coastguard Worker %add = sub i16 %tmp4, %sum.09 ; <i16> [#uses=2] 38*9880d681SAndroid Build Coastguard Worker %inc = add i16 %i.010, 1 ; <i16> [#uses=2] 39*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i16 %inc, %n ; <i1> [#uses=1] 40*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.end, label %for.body 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 43*9880d681SAndroid Build Coastguard Worker %sum.0.lcssa = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] 44*9880d681SAndroid Build Coastguard Worker ret i16 %sum.0.lcssa 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @or(i16* nocapture %a, i16 zeroext %n) nounwind readonly { 48*9880d681SAndroid Build Coastguard Workerentry: 49*9880d681SAndroid Build Coastguard Worker %cmp8 = icmp eq i16 %n, 0 ; <i1> [#uses=1] 50*9880d681SAndroid Build Coastguard Worker br i1 %cmp8, label %for.end, label %for.body 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body, %entry 53*9880d681SAndroid Build Coastguard Worker %i.010 = phi i16 [ 0, %entry ], [ %inc, %for.body ] ; <i16> [#uses=2] 54*9880d681SAndroid Build Coastguard Worker %sum.09 = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] 55*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr i16, i16* %a, i16 %i.010 ; <i16*> [#uses=1] 56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or: 57*9880d681SAndroid Build Coastguard Worker; CHECK: or r{{[0-9]+}}, r{{[0-9]+}} 58*9880d681SAndroid Build Coastguard Worker %tmp4 = load i16, i16* %arrayidx ; <i16> [#uses=1] 59*9880d681SAndroid Build Coastguard Worker %add = or i16 %tmp4, %sum.09 ; <i16> [#uses=2] 60*9880d681SAndroid Build Coastguard Worker %inc = add i16 %i.010, 1 ; <i16> [#uses=2] 61*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i16 %inc, %n ; <i1> [#uses=1] 62*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.end, label %for.body 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 65*9880d681SAndroid Build Coastguard Worker %sum.0.lcssa = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] 66*9880d681SAndroid Build Coastguard Worker ret i16 %sum.0.lcssa 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @xor(i16* nocapture %a, i16 zeroext %n) nounwind readonly { 70*9880d681SAndroid Build Coastguard Workerentry: 71*9880d681SAndroid Build Coastguard Worker %cmp8 = icmp eq i16 %n, 0 ; <i1> [#uses=1] 72*9880d681SAndroid Build Coastguard Worker br i1 %cmp8, label %for.end, label %for.body 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body, %entry 75*9880d681SAndroid Build Coastguard Worker %i.010 = phi i16 [ 0, %entry ], [ %inc, %for.body ] ; <i16> [#uses=2] 76*9880d681SAndroid Build Coastguard Worker %sum.09 = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] 77*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr i16, i16* %a, i16 %i.010 ; <i16*> [#uses=1] 78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor: 79*9880d681SAndroid Build Coastguard Worker; CHECK: xor r{{[0-9]+}}, r{{[0-9]+}} 80*9880d681SAndroid Build Coastguard Worker %tmp4 = load i16, i16* %arrayidx ; <i16> [#uses=1] 81*9880d681SAndroid Build Coastguard Worker %add = xor i16 %tmp4, %sum.09 ; <i16> [#uses=2] 82*9880d681SAndroid Build Coastguard Worker %inc = add i16 %i.010, 1 ; <i16> [#uses=2] 83*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i16 %inc, %n ; <i1> [#uses=1] 84*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.end, label %for.body 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 87*9880d681SAndroid Build Coastguard Worker %sum.0.lcssa = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] 88*9880d681SAndroid Build Coastguard Worker ret i16 %sum.0.lcssa 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @and(i16* nocapture %a, i16 zeroext %n) nounwind readonly { 92*9880d681SAndroid Build Coastguard Workerentry: 93*9880d681SAndroid Build Coastguard Worker %cmp8 = icmp eq i16 %n, 0 ; <i1> [#uses=1] 94*9880d681SAndroid Build Coastguard Worker br i1 %cmp8, label %for.end, label %for.body 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body, %entry 97*9880d681SAndroid Build Coastguard Worker %i.010 = phi i16 [ 0, %entry ], [ %inc, %for.body ] ; <i16> [#uses=2] 98*9880d681SAndroid Build Coastguard Worker %sum.09 = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] 99*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr i16, i16* %a, i16 %i.010 ; <i16*> [#uses=1] 100*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and: 101*9880d681SAndroid Build Coastguard Worker; CHECK: and r{{[0-9]+}}, r{{[0-9]+}} 102*9880d681SAndroid Build Coastguard Worker %tmp4 = load i16, i16* %arrayidx ; <i16> [#uses=1] 103*9880d681SAndroid Build Coastguard Worker %add = and i16 %tmp4, %sum.09 ; <i16> [#uses=2] 104*9880d681SAndroid Build Coastguard Worker %inc = add i16 %i.010, 1 ; <i16> [#uses=2] 105*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i16 %inc, %n ; <i1> [#uses=1] 106*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.end, label %for.body 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 109*9880d681SAndroid Build Coastguard Worker %sum.0.lcssa = phi i16 [ 0, %entry ], [ %add, %for.body ] ; <i16> [#uses=1] 110*9880d681SAndroid Build Coastguard Worker ret i16 %sum.0.lcssa 111*9880d681SAndroid Build Coastguard Worker} 112