xref: /llvm-project/llvm/test/CodeGen/M68k/Control/setcc.ll (revision c4c9d4f306732c854fa88d2f30c1a22bb025d0c9)
1c23a780cSMin-Yih Hsu; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2c23a780cSMin-Yih Hsu; RUN: llc < %s -mtriple=m68k-linux -verify-machineinstrs | FileCheck %s
3c23a780cSMin-Yih Hsu
4c23a780cSMin-Yih Hsu;; TODO All these can be improved
5c23a780cSMin-Yih Hsu
6c23a780cSMin-Yih Hsudefine zeroext i16 @t1(i16 zeroext %x) nounwind readnone ssp {
7c23a780cSMin-Yih Hsu; CHECK-LABEL: t1:
8c23a780cSMin-Yih Hsu; CHECK:       ; %bb.0: ; %entry
9c23a780cSMin-Yih Hsu; CHECK-NEXT:    move.w (6,%sp), %d0
10c23a780cSMin-Yih Hsu; CHECK-NEXT:    and.l #65535, %d0
11c23a780cSMin-Yih Hsu; CHECK-NEXT:    sub.l #26, %d0
12c23a780cSMin-Yih Hsu; CHECK-NEXT:    shi %d0
13c23a780cSMin-Yih Hsu; CHECK-NEXT:    and.l #255, %d0
14c23a780cSMin-Yih Hsu; CHECK-NEXT:    lsl.l #5, %d0
15c23a780cSMin-Yih Hsu; CHECK-NEXT:    rts
16c23a780cSMin-Yih Hsuentry:
17c23a780cSMin-Yih Hsu  %0 = icmp ugt i16 %x, 26                        ; <i1> [#uses=1]
18c23a780cSMin-Yih Hsu  %iftmp.1.0 = select i1 %0, i16 32, i16 0        ; <i16> [#uses=1]
19c23a780cSMin-Yih Hsu  ret i16 %iftmp.1.0
20c23a780cSMin-Yih Hsu}
21c23a780cSMin-Yih Hsu
22c23a780cSMin-Yih Hsudefine zeroext i16 @t2(i16 zeroext %x) nounwind readnone ssp {
23c23a780cSMin-Yih Hsu; CHECK-LABEL: t2:
24c23a780cSMin-Yih Hsu; CHECK:       ; %bb.0: ; %entry
25c23a780cSMin-Yih Hsu; CHECK-NEXT:    move.w (6,%sp), %d0
26c23a780cSMin-Yih Hsu; CHECK-NEXT:    and.l #65535, %d0
27c23a780cSMin-Yih Hsu; CHECK-NEXT:    sub.l #26, %d0
28c23a780cSMin-Yih Hsu; CHECK-NEXT:    scs %d0
29c23a780cSMin-Yih Hsu; CHECK-NEXT:    and.l #255, %d0
30c23a780cSMin-Yih Hsu; CHECK-NEXT:    lsl.l #5, %d0
31c23a780cSMin-Yih Hsu; CHECK-NEXT:    rts
32c23a780cSMin-Yih Hsuentry:
33c23a780cSMin-Yih Hsu  %0 = icmp ult i16 %x, 26                        ; <i1> [#uses=1]
34c23a780cSMin-Yih Hsu  %iftmp.0.0 = select i1 %0, i16 32, i16 0        ; <i16> [#uses=1]
35c23a780cSMin-Yih Hsu  ret i16 %iftmp.0.0
36c23a780cSMin-Yih Hsu}
37c23a780cSMin-Yih Hsu
38c23a780cSMin-Yih Hsudefine fastcc i64 @t3(i64 %x) nounwind readnone ssp {
39c23a780cSMin-Yih Hsu; CHECK-LABEL: t3:
40c23a780cSMin-Yih Hsu; CHECK:       ; %bb.0: ; %entry
41657bb726SMin-Yih Hsu; CHECK-NEXT:    suba.l #4, %sp
42c23a780cSMin-Yih Hsu; CHECK-NEXT:    movem.l %d2, (0,%sp) ; 8-byte Folded Spill
43*c4c9d4f3SPeter Lafreniere; CHECK-NEXT:    moveq #0, %d2
44c23a780cSMin-Yih Hsu; CHECK-NEXT:    sub.l #18, %d1
45c23a780cSMin-Yih Hsu; CHECK-NEXT:    subx.l %d2, %d0
46c23a780cSMin-Yih Hsu; CHECK-NEXT:    scs %d0
47c23a780cSMin-Yih Hsu; CHECK-NEXT:    move.l %d0, %d1
48c23a780cSMin-Yih Hsu; CHECK-NEXT:    and.l #255, %d1
49c23a780cSMin-Yih Hsu; CHECK-NEXT:    lsl.l #6, %d1
50c23a780cSMin-Yih Hsu; CHECK-NEXT:    move.l %d2, %d0
51c23a780cSMin-Yih Hsu; CHECK-NEXT:    movem.l (0,%sp), %d2 ; 8-byte Folded Reload
52657bb726SMin-Yih Hsu; CHECK-NEXT:    adda.l #4, %sp
53c23a780cSMin-Yih Hsu; CHECK-NEXT:    rts
54c23a780cSMin-Yih Hsuentry:
55c23a780cSMin-Yih Hsu  %0 = icmp ult i64 %x, 18                        ; <i1> [#uses=1]
56c23a780cSMin-Yih Hsu  %iftmp.2.0 = select i1 %0, i64 64, i64 0        ; <i64> [#uses=1]
57c23a780cSMin-Yih Hsu  ret i64 %iftmp.2.0
58c23a780cSMin-Yih Hsu}
59c23a780cSMin-Yih Hsu
60c23a780cSMin-Yih Hsudefine i8 @t5(i32 %a) {
61c23a780cSMin-Yih Hsu; CHECK-LABEL: t5:
62c23a780cSMin-Yih Hsu; CHECK:         .cfi_startproc
63c23a780cSMin-Yih Hsu; CHECK-NEXT:  ; %bb.0: ; %entry
64*c4c9d4f3SPeter Lafreniere; CHECK-NEXT:    moveq #31, %d1
65c23a780cSMin-Yih Hsu; CHECK-NEXT:    move.l (4,%sp), %d0
66c23a780cSMin-Yih Hsu; CHECK-NEXT:    lsr.l %d1, %d0
67c23a780cSMin-Yih Hsu; CHECK-NEXT:    eori.b #1, %d0
68c23a780cSMin-Yih Hsu; CHECK-NEXT:    ; kill: def $bd0 killed $bd0 killed $d0
69c23a780cSMin-Yih Hsu; CHECK-NEXT:    rts
70c23a780cSMin-Yih Hsuentry:
71c23a780cSMin-Yih Hsu  %.lobit = lshr i32 %a, 31
72c23a780cSMin-Yih Hsu  %trunc = trunc i32 %.lobit to i8
73c23a780cSMin-Yih Hsu  %.not = xor i8 %trunc, 1
74c23a780cSMin-Yih Hsu  ret i8 %.not
75c23a780cSMin-Yih Hsu}
76c23a780cSMin-Yih Hsu
77c23a780cSMin-Yih Hsu
78c23a780cSMin-Yih Hsu;
79c23a780cSMin-Yih Hsu; TODO: Should it be like this?
80c23a780cSMin-Yih Hsu; cmp.l
81c23a780cSMin-Yih Hsu; smi
82c23a780cSMin-Yih Hsu; since we are intereseted in sign bit only
83c23a780cSMin-Yih Hsu; and.l in the end is superfluous
84c23a780cSMin-Yih Hsu
85c23a780cSMin-Yih Hsudefine zeroext i1 @t6(i32 %a) {
86c23a780cSMin-Yih Hsu; CHECK-LABEL: t6:
87c23a780cSMin-Yih Hsu; CHECK:         .cfi_startproc
88c23a780cSMin-Yih Hsu; CHECK-NEXT:  ; %bb.0: ; %entry
89*c4c9d4f3SPeter Lafreniere; CHECK-NEXT:    moveq #31, %d0
90c23a780cSMin-Yih Hsu; CHECK-NEXT:    move.l (4,%sp), %d1
91c23a780cSMin-Yih Hsu; CHECK-NEXT:    lsr.l %d0, %d1
92c23a780cSMin-Yih Hsu; CHECK-NEXT:    eori.b #1, %d1
93c23a780cSMin-Yih Hsu; CHECK-NEXT:    move.l %d1, %d0
94c23a780cSMin-Yih Hsu; CHECK-NEXT:    and.l #255, %d0
95c23a780cSMin-Yih Hsu; CHECK-NEXT:    rts
96c23a780cSMin-Yih Hsuentry:
97c23a780cSMin-Yih Hsu  %.lobit = lshr i32 %a, 31
98c23a780cSMin-Yih Hsu  %trunc = trunc i32 %.lobit to i1
99c23a780cSMin-Yih Hsu  %.not = xor i1 %trunc, 1
100c23a780cSMin-Yih Hsu  ret i1 %.not
101c23a780cSMin-Yih Hsu}
102