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