316 lines · plain
1; RUN: llc < %s -mtriple=avr | FileCheck %s2; RUN: llc < %s -mtriple=avr -mcpu=attiny10 | FileCheck --check-prefix=TINY %s3 4declare void @f1(i8)5declare void @f2(i8)6define void @cmp8(i8 %a, i8 %b) {7; CHECK-LABEL: cmp8:8; CHECK: cp9; CHECK-NOT: cpc10 %cmp = icmp eq i8 %a, %b11 br i1 %cmp, label %if.then, label %if.else12if.then:13 tail call void @f1(i8 %a)14 br label %if.end15if.else:16 tail call void @f2(i8 %b)17 br label %if.end18if.end:19 ret void20}21 22declare void @f3(i16)23declare void @f4(i16)24define void @cmp16(i16 %a, i16 %b) {25; CHECK-LABEL: cmp16:26; CHECK: cp27; CHECK-NEXT: cpc28 %cmp = icmp eq i16 %a, %b29 br i1 %cmp, label %if.then, label %if.else30if.then:31 tail call void @f3(i16 %a)32 br label %if.end33if.else:34 tail call void @f4(i16 %b)35 br label %if.end36if.end:37 ret void38}39 40define void @cmpimm16(i16 %a) {41; CHECK-LABEL: cmpimm16:42; CHECK: cpi43; CHECK-NEXT: cpc44 %cmp = icmp eq i16 %a, 456745 br i1 %cmp, label %if.then, label %if.else46if.then:47 tail call void @f3(i16 %a)48 br label %if.end49if.else:50 tail call void @f4(i16 %a)51 br label %if.end52if.end:53 ret void54}55 56declare void @f5(i32)57declare void @f6(i32)58define void @cmp32(i32 %a, i32 %b) {59; CHECK-LABEL: cmp32:60; CHECK: cp61; CHECK-NEXT: cpc62; CHECK-NEXT: cpc63; CHECK-NEXT: cpc64 %cmp = icmp eq i32 %a, %b65 br i1 %cmp, label %if.then, label %if.else66if.then:67 tail call void @f5(i32 %a)68 br label %if.end69if.else:70 tail call void @f6(i32 %b)71 br label %if.end72if.end:73 ret void74}75 76define void @cmpimm32(i32 %a) {77; CHECK-LABEL: cmpimm32:78; CHECK: cpi79; CHECK-NEXT: cpc80; CHECK-NEXT: cpc81; CHECK-NEXT: cpc82 %cmp = icmp eq i32 %a, 678934383 br i1 %cmp, label %if.then, label %if.else84if.then:85 tail call void @f5(i32 %a)86 br label %if.end87if.else:88 tail call void @f6(i32 %a)89 br label %if.end90if.end:91 ret void92}93 94declare void @f7(i64)95declare void @f8(i64)96define void @cmp64(i64 %a, i64 %b) {97; CHECK-LABEL: cmp64:98; CHECK: cp99; CHECK-NEXT: cpc100; CHECK-NEXT: cpc101; CHECK-NEXT: cpc102; CHECK-NEXT: cpc103; CHECK-NEXT: cpc104; CHECK-NEXT: cpc105; CHECK-NEXT: cpc106 %cmp = icmp eq i64 %a, %b107 br i1 %cmp, label %if.then, label %if.else108if.then:109 tail call void @f7(i64 %a)110 br label %if.end111if.else:112 tail call void @f8(i64 %b)113 br label %if.end114if.end:115 ret void116}117 118define void @cmpimm64(i64 %a) {119; CHECK-LABEL: cmpimm64:120; CHECK: cpi121; CHECK-NEXT: cpc122; CHECK-NEXT: cpc123; CHECK-NEXT: cpc124; CHECK-NEXT: cpc125; CHECK-NEXT: cpc126; CHECK-NEXT: cpc127; CHECK-NEXT: cpc128 %cmp = icmp eq i64 %a, 234566452129 br i1 %cmp, label %if.then, label %if.else130if.then:131 tail call void @f7(i64 %a)132 br label %if.end133if.else:134 tail call void @f8(i64 %a)135 br label %if.end136if.end:137 ret void138}139 140declare void @f9()141declare void @f10()142 143define void @tst8(i8 %a) {144; CHECK-LABEL: tst8:145; CHECK: tst r24146; CHECK-NEXT: brmi147 %cmp = icmp sgt i8 %a, -1148 br i1 %cmp, label %if.then, label %if.else149if.then:150 tail call void @f9()151 br label %if.end152if.else:153 tail call void @f10()154 br label %if.end155if.end:156 ret void157}158 159define void @tst16(i16 %a) {160; CHECK-LABEL: tst16:161; CHECK: tst r25162; CHECK-NEXT: brmi163 %cmp = icmp sgt i16 %a, -1164 br i1 %cmp, label %if.then, label %if.else165if.then:166 tail call void @f9()167 br label %if.end168if.else:169 tail call void @f10()170 br label %if.end171if.end:172 ret void173}174 175define void @tst32(i32 %a) {176; CHECK-LABEL: tst32:177; CHECK: tst r25178; CHECK-NEXT: brmi179 %cmp = icmp sgt i32 %a, -1180 br i1 %cmp, label %if.then, label %if.else181if.then:182 tail call void @f9()183 br label %if.end184if.else:185 tail call void @f10()186 br label %if.end187if.end:188 ret void189}190 191define void @tst64(i64 %a) {192; CHECK-LABEL: tst64:193; CHECK: tst r25194; CHECK-NEXT: brmi195 %cmp = icmp sgt i64 %a, -1196 br i1 %cmp, label %if.then, label %if.else197if.then:198 tail call void @f9()199 br label %if.end200if.else:201 tail call void @f10()202 br label %if.end203if.end:204 ret void205}206 207define i16 @cmp_i16_gt_0(i16 %0) {208; CHECK-LABEL: cmp_i16_gt_0:209; CHECK: ; %bb.0:210; CHECK-NEXT: ldi r18, 1211; CHECK-NEXT: cp r1, r24212; CHECK-NEXT: cpc r1, r25213; CHECK-NEXT: brlt .LBB11_2214; CHECK-NEXT: ; %bb.1:215; CHECK-NEXT: mov r18, r1216; CHECK-NEXT: .LBB11_2:217; CHECK-NEXT: mov r24, r18218; CHECK-NEXT: clr r25219; CHECK-NEXT: ret220;221; TINY-LABEL: cmp_i16_gt_0:222; TINY: ; %bb.0:223; TINY-NEXT: ldi r20, 1224; TINY-NEXT: cp r17, r24225; TINY-NEXT: cpc r17, r25226; TINY-NEXT: brlt .LBB11_2227; TINY-NEXT: ; %bb.1:228; TINY-NEXT: mov r20, r17229; TINY-NEXT: .LBB11_2:230; TINY-NEXT: mov r24, r20231; TINY-NEXT: clr r25232; TINY-NEXT: ret233 %2 = icmp sgt i16 %0, 0234 %3 = zext i1 %2 to i16235 ret i16 %3236}237 238define i16 @cmp_i16_gt_126(i16 %0) {239; CHECK-LABEL: cmp_i16_gt_126:240; CHECK: ; %bb.0:241; CHECK-NEXT: ldi r18, 1242; CHECK-NEXT: cpi r24, 127243; CHECK-NEXT: cpc r25, r1244; CHECK-NEXT: brge .LBB12_2245; CHECK-NEXT: ; %bb.1:246; CHECK-NEXT: mov r18, r1247; CHECK-NEXT: .LBB12_2:248; CHECK-NEXT: mov r24, r18249; CHECK-NEXT: clr r25250; CHECK-NEXT: ret251;252; TINY-LABEL: cmp_i16_gt_126:253; TINY: ; %bb.0:254; TINY-NEXT: ldi r20, 1255; TINY-NEXT: cpi r24, 127256; TINY-NEXT: cpc r25, r17257; TINY-NEXT: brge .LBB12_2258; TINY-NEXT: ; %bb.1:259; TINY-NEXT: mov r20, r17260; TINY-NEXT: .LBB12_2:261; TINY-NEXT: mov r24, r20262; TINY-NEXT: clr r25263; TINY-NEXT: ret264 %2 = icmp sgt i16 %0, 126265 %3 = zext i1 %2 to i16266 ret i16 %3267}268 269define i16 @cmp_i16_gt_1023(i16 %0) {270; CHECK-LABEL: cmp_i16_gt_1023:271; CHECK: ; %bb.0:272; CHECK-NEXT: ldi r19, 4273; CHECK-NEXT: ldi r18, 1274; CHECK-NEXT: cp r24, r1275; CHECK-NEXT: cpc r25, r19276; CHECK-NEXT: brge .LBB13_2277; CHECK-NEXT: ; %bb.1:278; CHECK-NEXT: mov r18, r1279; CHECK-NEXT: .LBB13_2:280; CHECK-NEXT: mov r24, r18281; CHECK-NEXT: clr r25282; CHECK-NEXT: ret283;284; TINY-LABEL: cmp_i16_gt_1023:285; TINY: ; %bb.0:286; TINY-NEXT: ldi r21, 4287; TINY-NEXT: ldi r20, 1288; TINY-NEXT: cp r24, r17289; TINY-NEXT: cpc r25, r21290; TINY-NEXT: brge .LBB13_2291; TINY-NEXT: ; %bb.1:292; TINY-NEXT: mov r20, r17293; TINY-NEXT: .LBB13_2:294; TINY-NEXT: mov r24, r20295; TINY-NEXT: clr r25296; TINY-NEXT: ret297 %2 = icmp sgt i16 %0, 1023298 %3 = zext i1 %2 to i16299 ret i16 %3300}301 302define void @cmp_issue152097(i16 %a) addrspace(1) {303; See: https://github.com/llvm/llvm-project/issues/152097304; CHECK-LABEL: cmp_issue152097305; CHECK: ldi r18, -1306; CHECK-NEXT: cpi r24, -2307; CHECK-NEXT: cpc r25, r18308; CHECK-NEXT: ret309 %cmp = icmp ugt i16 -2, %a310 br i1 %cmp, label %if.then, label %if.else311if.then:312 ret void313if.else:314 ret void315}316