[Demangle] Add a few more options to the microsoft demangler
[llvm-complete.git] / test / CodeGen / X86 / return-ext.ll
blobc66e518943a088b470e707641cd50fceecd91c7d
1 ; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -fixup-byte-word-insts=0 | \
2 ; RUN:   FileCheck -check-prefix=CHECK -check-prefix=BWOFF %s
3 ; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -fixup-byte-word-insts=1 | \
4 ; RUN:   FileCheck -check-prefix=CHECK -check-prefix=BWON %s
5 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -fixup-byte-word-insts=0 | \
6 ; RUN:   FileCheck -check-prefix=CHECK -check-prefix=BWOFF %s
7 ; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -fixup-byte-word-insts=1 | \
8 ; RUN:   FileCheck -check-prefix=CHECK -check-prefix=BWON %s
9 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -fixup-byte-word-insts=0 | \
10 ; RUN:   FileCheck -check-prefix=DARWIN -check-prefix=DARWIN-BWOFF %s
11 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -fixup-byte-word-insts=1 | \
12 ; RUN:   FileCheck -check-prefix=DARWIN -check-prefix=DARWIN-BWON %s
15 @x = common global i32 0, align 4
17 define zeroext i1 @unsigned_i1() {
18 entry:
19   %0 = load i32, i32* @x
20   %cmp = icmp eq i32 %0, 42
21   ret i1 %cmp
23 ; Unsigned i1 return values are not extended.
24 ; CHECK-LABEL: unsigned_i1:
25 ; CHECK:                         cmp
26 ; CHECK-NEXT:  sete
27 ; CHECK-NEXT:  ret
30 define zeroext i8 @unsigned_i8() {
31 entry:
32   %0 = load i32, i32* @x
33   %cmp = icmp eq i32 %0, 42
34   %retval = zext i1 %cmp to i8
35   ret i8 %retval
37 ; Unsigned i8 return values are not extended.
38 ; CHECK-LABEL: unsigned_i8:
39 ; CHECK:                         cmp
40 ; CHECK-NEXT:  sete
41 ; CHECK-NEXT:  ret
43 ; Except on Darwin, for legacy reasons.
44 ; DARWIN-LABEL: unsigned_i8:
45 ; DARWIN:       xorl
46 ; DARWIN-NEXT:  cmp
47 ; DARWIN-NEXT:  sete
48 ; DARWIN-NEXT:  ret
51 define signext i8 @signed_i8() {
52 entry:
53   %0 = load i32, i32* @x
54   %cmp = icmp eq i32 %0, 42
55   %retval = zext i1 %cmp to i8
56   ret i8 %retval
58 ; Signed i8 return values are not extended.
59 ; CHECK-LABEL: signed_i8:
60 ; CHECK:                         cmp
61 ; CHECK-NEXT:  sete
62 ; CHECK-NEXT:  ret
64 ; Except on Darwin, for legacy reasons.
65 ; DARWIN-LABEL: signed_i8:
66 ; DARWIN:       xorl
67 ; DARWIN-NEXT:  cmp
68 ; DARWIN-NEXT:  sete
69 ; DARWIN-NEXT:  ret
72 @a = common global i16 0
73 @b = common global i16 0
74 define zeroext i16 @unsigned_i16() {
75 entry:
76   %0 = load i16, i16* @a
77   %1 = load i16, i16* @b
78   %add = add i16 %1, %0
79   ret i16 %add
81 ; i16 return values are not extended.
82 ; CHECK-LABEL: unsigned_i16:
83 ; BWOFF:       movw
84 ; BWON:        movzwl
85 ; CHECK-NEXT:  addw
86 ; CHECK-NEXT:  ret
88 ; Except on Darwin, for legacy reasons.
89 ; DARWIN-LABEL: unsigned_i16:
90 ; DARWIN-BWOFF: movw
91 ; DARWIN-BWON:  movzwl
92 ; DARWIN-NEXT:  addw
93 ; DARWIN-NEXT:  movzwl
94 ; DARWIN-NEXT:  ret
98 define i32 @use_i1() {
99 entry:
100   %0 = call i1 @unsigned_i1();
101   %1 = zext i1 %0 to i32
102   ret i32 %1
104 ; The high 24 bits of %eax from a function returning i1 are undefined.
105 ; CHECK-LABEL: use_i1:
106 ; CHECK: call
107 ; CHECK-NEXT: movzbl
108 ; CHECK-NEXT: {{pop|add}}
109 ; CHECK-NEXT: .cfi_def_cfa_offset {{4|8}}
110 ; CHECK-NEXT: ret
113 define i32 @use_i8() {
114 entry:
115   %0 = call i8 @unsigned_i8();
116   %1 = zext i8 %0 to i32
117   ret i32 %1
119 ; The high 24 bits of %eax from a function returning i8 are undefined.
120 ; CHECK-LABEL: use_i8:
121 ; CHECK: call
122 ; CHECK-NEXT: movzbl
123 ; CHECK-NEXT: {{pop|add}}
124 ; CHECK-NEXT: .cfi_def_cfa_offset {{4|8}}
125 ; CHECK-NEXT: ret
128 define i32 @use_i16() {
129 entry:
130   %0 = call i16 @unsigned_i16();
131   %1 = zext i16 %0 to i32
132   ret i32 %1
134 ; The high 16 bits of %eax from a function returning i16 are undefined.
135 ; CHECK-LABEL: use_i16:
136 ; CHECK: call
137 ; CHECK-NEXT: movzwl
138 ; CHECK-NEXT: {{pop|add}}
139 ; CHECK-NEXT: .cfi_def_cfa_offset {{4|8}}
140 ; CHECK-NEXT: ret