1; RUN: llc < %s -march=avr | FileCheck %s 2 3declare void @f1(i8) 4declare void @f2(i8) 5define void @cmp8(i8 %a, i8 %b) { 6; CHECK-LABEL: cmp8: 7; CHECK: cp 8; CHECK-NOT: cpc 9 %cmp = icmp eq i8 %a, %b 10 br i1 %cmp, label %if.then, label %if.else 11if.then: 12 tail call void @f1(i8 %a) 13 br label %if.end 14if.else: 15 tail call void @f2(i8 %b) 16 br label %if.end 17if.end: 18 ret void 19} 20 21declare void @f3(i16) 22declare void @f4(i16) 23define void @cmp16(i16 %a, i16 %b) { 24; CHECK-LABEL: cmp16: 25; CHECK: cp 26; CHECK-NEXT: cpc 27 %cmp = icmp eq i16 %a, %b 28 br i1 %cmp, label %if.then, label %if.else 29if.then: 30 tail call void @f3(i16 %a) 31 br label %if.end 32if.else: 33 tail call void @f4(i16 %b) 34 br label %if.end 35if.end: 36 ret void 37} 38 39define void @cmpimm16(i16 %a) { 40; CHECK-LABEL: cmpimm16: 41; CHECK: cpi 42; CHECK-NEXT: cpc 43 %cmp = icmp eq i16 %a, 4567 44 br i1 %cmp, label %if.then, label %if.else 45if.then: 46 tail call void @f3(i16 %a) 47 br label %if.end 48if.else: 49 tail call void @f4(i16 %a) 50 br label %if.end 51if.end: 52 ret void 53} 54 55declare void @f5(i32) 56declare void @f6(i32) 57define void @cmp32(i32 %a, i32 %b) { 58; CHECK-LABEL: cmp32: 59; CHECK: cp 60; CHECK-NEXT: cpc 61; CHECK-NEXT: cpc 62; CHECK-NEXT: cpc 63 %cmp = icmp eq i32 %a, %b 64 br i1 %cmp, label %if.then, label %if.else 65if.then: 66 tail call void @f5(i32 %a) 67 br label %if.end 68if.else: 69 tail call void @f6(i32 %b) 70 br label %if.end 71if.end: 72 ret void 73} 74 75define void @cmpimm32(i32 %a) { 76; CHECK-LABEL: cmpimm32: 77; CHECK: cpi 78; CHECK-NEXT: cpc 79; CHECK-NEXT: cpc 80; CHECK-NEXT: cpc 81 %cmp = icmp eq i32 %a, 6789343 82 br i1 %cmp, label %if.then, label %if.else 83if.then: 84 tail call void @f5(i32 %a) 85 br label %if.end 86if.else: 87 tail call void @f6(i32 %a) 88 br label %if.end 89if.end: 90 ret void 91} 92 93declare void @f7(i64) 94declare void @f8(i64) 95define void @cmp64(i64 %a, i64 %b) { 96; CHECK-LABEL: cmp64: 97; CHECK: cp 98; CHECK-NEXT: cpc 99; CHECK-NEXT: cpc 100; CHECK-NEXT: cpc 101; CHECK-NEXT: cpc 102; CHECK-NEXT: cpc 103; CHECK-NEXT: cpc 104; CHECK-NEXT: cpc 105 %cmp = icmp eq i64 %a, %b 106 br i1 %cmp, label %if.then, label %if.else 107if.then: 108 tail call void @f7(i64 %a) 109 br label %if.end 110if.else: 111 tail call void @f8(i64 %b) 112 br label %if.end 113if.end: 114 ret void 115} 116 117define void @cmpimm64(i64 %a) { 118; CHECK-LABEL: cmpimm64: 119; CHECK: cpi 120; CHECK-NEXT: cpc 121; CHECK-NEXT: cpc 122; CHECK-NEXT: cpc 123; CHECK-NEXT: cpc 124; CHECK-NEXT: cpc 125; CHECK-NEXT: cpc 126; CHECK-NEXT: cpc 127 %cmp = icmp eq i64 %a, 234566452 128 br i1 %cmp, label %if.then, label %if.else 129if.then: 130 tail call void @f7(i64 %a) 131 br label %if.end 132if.else: 133 tail call void @f8(i64 %a) 134 br label %if.end 135if.end: 136 ret void 137} 138 139declare void @f9() 140declare void @f10() 141 142define void @tst8(i8 %a) { 143; CHECK-LABEL: tst8: 144; CHECK: tst r24 145; CHECK-NEXT: brmi 146 %cmp = icmp sgt i8 %a, -1 147 br i1 %cmp, label %if.then, label %if.else 148if.then: 149 tail call void @f9() 150 br label %if.end 151if.else: 152 tail call void @f10() 153 br label %if.end 154if.end: 155 ret void 156} 157 158define void @tst16(i16 %a) { 159; CHECK-LABEL: tst16: 160; CHECK: tst r25 161; CHECK-NEXT: brmi 162 %cmp = icmp sgt i16 %a, -1 163 br i1 %cmp, label %if.then, label %if.else 164if.then: 165 tail call void @f9() 166 br label %if.end 167if.else: 168 tail call void @f10() 169 br label %if.end 170if.end: 171 ret void 172} 173 174define void @tst32(i32 %a) { 175; CHECK-LABEL: tst32: 176; CHECK: tst r25 177; CHECK-NEXT: brmi 178 %cmp = icmp sgt i32 %a, -1 179 br i1 %cmp, label %if.then, label %if.else 180if.then: 181 tail call void @f9() 182 br label %if.end 183if.else: 184 tail call void @f10() 185 br label %if.end 186if.end: 187 ret void 188} 189 190define void @tst64(i64 %a) { 191; CHECK-LABEL: tst64: 192; CHECK: tst r25 193; CHECK-NEXT: brmi 194 %cmp = icmp sgt i64 %a, -1 195 br i1 %cmp, label %if.then, label %if.else 196if.then: 197 tail call void @f9() 198 br label %if.end 199if.else: 200 tail call void @f10() 201 br label %if.end 202if.end: 203 ret void 204} 205