brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · c932bda Raw
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