annotate test/CodeGen/X86/memcmp.ll @ 121:803732b1fca8

LLVM 5.0
author kono
date Fri, 27 Oct 2017 17:07:41 +0900
parents 1172e4bd9c6f
children 3a76565eade5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
2 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=cmov | FileCheck %s --check-prefix=X86 --check-prefix=X86-NOSSE
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
3 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse | FileCheck %s --check-prefix=X86 --check-prefix=SSE --check-prefix=X86-SSE1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
4 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X86 --check-prefix=SSE --check-prefix=X86-SSE2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=X64 --check-prefix=X64-SSE2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx | FileCheck %s --check-prefix=X64 --check-prefix=X64-AVX --check-prefix=X64-AVX1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx2 | FileCheck %s --check-prefix=X64 --check-prefix=X64-AVX --check-prefix=X64-AVX2
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 ; This tests codegen time inlining/optimization of memcmp
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 ; rdar://6480398
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
12 @.str = private constant [65 x i8] c"0123456789012345678901234567890123456789012345678901234567890123\00", align 1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
13
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
14 declare i32 @memcmp(i8*, i8*, i64)
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
16 define i32 @length2(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
17 ; X86-LABEL: length2:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
18 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
19 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
20 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
21 ; X86-NEXT: movzwl (%ecx), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
22 ; X86-NEXT: movzwl (%eax), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
23 ; X86-NEXT: rolw $8, %cx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
24 ; X86-NEXT: rolw $8, %dx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
25 ; X86-NEXT: movzwl %cx, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
26 ; X86-NEXT: movzwl %dx, %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
27 ; X86-NEXT: subl %ecx, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
28 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
29 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
30 ; X64-LABEL: length2:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
31 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
32 ; X64-NEXT: movzwl (%rdi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
33 ; X64-NEXT: movzwl (%rsi), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
34 ; X64-NEXT: rolw $8, %ax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
35 ; X64-NEXT: rolw $8, %cx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
36 ; X64-NEXT: movzwl %ax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
37 ; X64-NEXT: movzwl %cx, %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
38 ; X64-NEXT: subl %ecx, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
39 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
40 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 2) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
41 ret i32 %m
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
42 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
44 define i1 @length2_eq(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
45 ; X86-LABEL: length2_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
46 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
47 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
48 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
49 ; X86-NEXT: movzwl (%ecx), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
50 ; X86-NEXT: cmpw (%eax), %cx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
51 ; X86-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
52 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
53 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
54 ; X64-LABEL: length2_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
55 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
56 ; X64-NEXT: movzwl (%rdi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
57 ; X64-NEXT: cmpw (%rsi), %ax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
58 ; X64-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
59 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
60 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 2) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
61 %c = icmp eq i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
62 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
63 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
65 define i1 @length2_eq_const(i8* %X) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
66 ; X86-LABEL: length2_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
67 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
68 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
69 ; X86-NEXT: movzwl (%eax), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
70 ; X86-NEXT: cmpl $12849, %eax # imm = 0x3231
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
71 ; X86-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
72 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
73 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
74 ; X64-LABEL: length2_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
75 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
76 ; X64-NEXT: movzwl (%rdi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
77 ; X64-NEXT: cmpl $12849, %eax # imm = 0x3231
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
78 ; X64-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
79 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
80 %m = tail call i32 @memcmp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 1), i64 2) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
81 %c = icmp ne i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
82 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
83 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
84
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
85 define i1 @length2_eq_nobuiltin_attr(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
86 ; X86-LABEL: length2_eq_nobuiltin_attr:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
87 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
88 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
89 ; X86-NEXT: pushl $2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
90 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
91 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
92 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
93 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
94 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
95 ; X86-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
96 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
97 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
98 ; X64-LABEL: length2_eq_nobuiltin_attr:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
99 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
100 ; X64-NEXT: pushq %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
101 ; X64-NEXT: movl $2, %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
102 ; X64-NEXT: callq memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
103 ; X64-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
104 ; X64-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
105 ; X64-NEXT: popq %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
106 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
107 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 2) nounwind nobuiltin
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
108 %c = icmp eq i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
109 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
110 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
112 define i32 @length3(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
113 ; X86-LABEL: length3:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
114 ; X86: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
115 ; X86-NEXT: pushl %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
116 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
117 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
118 ; X86-NEXT: movzwl (%eax), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
119 ; X86-NEXT: movzwl (%ecx), %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
120 ; X86-NEXT: rolw $8, %dx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
121 ; X86-NEXT: rolw $8, %si
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
122 ; X86-NEXT: cmpw %si, %dx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
123 ; X86-NEXT: jne .LBB4_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
124 ; X86-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
125 ; X86-NEXT: movzbl 2(%eax), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
126 ; X86-NEXT: movzbl 2(%ecx), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
127 ; X86-NEXT: subl %ecx, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
128 ; X86-NEXT: popl %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
129 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
130 ; X86-NEXT: .LBB4_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
131 ; X86-NEXT: setae %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
132 ; X86-NEXT: movzbl %al, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
133 ; X86-NEXT: leal -1(%eax,%eax), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
134 ; X86-NEXT: popl %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
135 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
136 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
137 ; X64-LABEL: length3:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
138 ; X64: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
139 ; X64-NEXT: movzwl (%rdi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
140 ; X64-NEXT: movzwl (%rsi), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
141 ; X64-NEXT: rolw $8, %ax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
142 ; X64-NEXT: rolw $8, %cx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
143 ; X64-NEXT: cmpw %cx, %ax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
144 ; X64-NEXT: jne .LBB4_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
145 ; X64-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
146 ; X64-NEXT: movzbl 2(%rdi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
147 ; X64-NEXT: movzbl 2(%rsi), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
148 ; X64-NEXT: subl %ecx, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
149 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
150 ; X64-NEXT: .LBB4_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
151 ; X64-NEXT: setae %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
152 ; X64-NEXT: movzbl %al, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
153 ; X64-NEXT: leal -1(%rax,%rax), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
154 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
155 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 3) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
156 ret i32 %m
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
157 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
159 define i1 @length3_eq(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
160 ; X86-LABEL: length3_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
161 ; X86: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
162 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
163 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
164 ; X86-NEXT: movzwl (%eax), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
165 ; X86-NEXT: cmpw (%ecx), %dx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
166 ; X86-NEXT: jne .LBB5_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
167 ; X86-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
168 ; X86-NEXT: movb 2(%eax), %dl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
169 ; X86-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
170 ; X86-NEXT: cmpb 2(%ecx), %dl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
171 ; X86-NEXT: je .LBB5_3
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
172 ; X86-NEXT: .LBB5_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
173 ; X86-NEXT: movl $1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
174 ; X86-NEXT: .LBB5_3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
175 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
176 ; X86-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
177 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
178 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
179 ; X64-LABEL: length3_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
180 ; X64: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
181 ; X64-NEXT: movzwl (%rdi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
182 ; X64-NEXT: cmpw (%rsi), %ax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
183 ; X64-NEXT: jne .LBB5_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
184 ; X64-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
185 ; X64-NEXT: movb 2(%rdi), %cl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
186 ; X64-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
187 ; X64-NEXT: cmpb 2(%rsi), %cl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
188 ; X64-NEXT: je .LBB5_3
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
189 ; X64-NEXT: .LBB5_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
190 ; X64-NEXT: movl $1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
191 ; X64-NEXT: .LBB5_3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
192 ; X64-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
193 ; X64-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
194 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
195 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 3) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
196 %c = icmp ne i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
197 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
198 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
199
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
200 define i32 @length4(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
201 ; X86-LABEL: length4:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
202 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
203 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
204 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
205 ; X86-NEXT: movl (%ecx), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
206 ; X86-NEXT: movl (%eax), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
207 ; X86-NEXT: bswapl %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
208 ; X86-NEXT: bswapl %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
209 ; X86-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
210 ; X86-NEXT: cmpl %edx, %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
211 ; X86-NEXT: seta %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
212 ; X86-NEXT: sbbl $0, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
213 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
214 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
215 ; X64-LABEL: length4:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
216 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
217 ; X64-NEXT: movl (%rdi), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
218 ; X64-NEXT: movl (%rsi), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
219 ; X64-NEXT: bswapl %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
220 ; X64-NEXT: bswapl %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
221 ; X64-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
222 ; X64-NEXT: cmpl %edx, %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
223 ; X64-NEXT: seta %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
224 ; X64-NEXT: sbbl $0, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
225 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
226 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 4) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
227 ret i32 %m
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
229
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
230 define i1 @length4_eq(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
231 ; X86-LABEL: length4_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
232 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
233 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
234 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
235 ; X86-NEXT: movl (%ecx), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
236 ; X86-NEXT: cmpl (%eax), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
237 ; X86-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
238 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
239 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
240 ; X64-LABEL: length4_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
241 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
242 ; X64-NEXT: movl (%rdi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
243 ; X64-NEXT: cmpl (%rsi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
244 ; X64-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
245 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
246 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 4) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
247 %c = icmp ne i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
248 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
249 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
250
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
251 define i1 @length4_eq_const(i8* %X) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
252 ; X86-LABEL: length4_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
253 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
254 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
255 ; X86-NEXT: cmpl $875770417, (%eax) # imm = 0x34333231
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
256 ; X86-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
257 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
258 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
259 ; X64-LABEL: length4_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
260 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
261 ; X64-NEXT: cmpl $875770417, (%rdi) # imm = 0x34333231
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
262 ; X64-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
263 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
264 %m = tail call i32 @memcmp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 1), i64 4) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
265 %c = icmp eq i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
266 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
267 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
268
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
269 define i32 @length5(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
270 ; X86-LABEL: length5:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
271 ; X86: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
272 ; X86-NEXT: pushl %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
273 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
274 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
275 ; X86-NEXT: movl (%eax), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
276 ; X86-NEXT: movl (%ecx), %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
277 ; X86-NEXT: bswapl %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
278 ; X86-NEXT: bswapl %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
279 ; X86-NEXT: cmpl %esi, %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
280 ; X86-NEXT: jne .LBB9_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
281 ; X86-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
282 ; X86-NEXT: movzbl 4(%eax), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
283 ; X86-NEXT: movzbl 4(%ecx), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
284 ; X86-NEXT: subl %ecx, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
285 ; X86-NEXT: popl %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
286 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
287 ; X86-NEXT: .LBB9_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
288 ; X86-NEXT: setae %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
289 ; X86-NEXT: movzbl %al, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
290 ; X86-NEXT: leal -1(%eax,%eax), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
291 ; X86-NEXT: popl %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
292 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
293 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
294 ; X64-LABEL: length5:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
295 ; X64: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
296 ; X64-NEXT: movl (%rdi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
297 ; X64-NEXT: movl (%rsi), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
298 ; X64-NEXT: bswapl %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
299 ; X64-NEXT: bswapl %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
300 ; X64-NEXT: cmpl %ecx, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
301 ; X64-NEXT: jne .LBB9_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
302 ; X64-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
303 ; X64-NEXT: movzbl 4(%rdi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
304 ; X64-NEXT: movzbl 4(%rsi), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
305 ; X64-NEXT: subl %ecx, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
306 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
307 ; X64-NEXT: .LBB9_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
308 ; X64-NEXT: setae %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
309 ; X64-NEXT: movzbl %al, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
310 ; X64-NEXT: leal -1(%rax,%rax), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
311 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
312 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 5) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
313 ret i32 %m
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
315
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
316 define i1 @length5_eq(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
317 ; X86-LABEL: length5_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
318 ; X86: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
319 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
320 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
321 ; X86-NEXT: movl (%eax), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
322 ; X86-NEXT: cmpl (%ecx), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
323 ; X86-NEXT: jne .LBB10_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
324 ; X86-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
325 ; X86-NEXT: movb 4(%eax), %dl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
326 ; X86-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
327 ; X86-NEXT: cmpb 4(%ecx), %dl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
328 ; X86-NEXT: je .LBB10_3
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
329 ; X86-NEXT: .LBB10_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
330 ; X86-NEXT: movl $1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
331 ; X86-NEXT: .LBB10_3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
332 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
333 ; X86-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
334 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
335 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
336 ; X64-LABEL: length5_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
337 ; X64: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
338 ; X64-NEXT: movl (%rdi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
339 ; X64-NEXT: cmpl (%rsi), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
340 ; X64-NEXT: jne .LBB10_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
341 ; X64-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
342 ; X64-NEXT: movb 4(%rdi), %cl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
343 ; X64-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
344 ; X64-NEXT: cmpb 4(%rsi), %cl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
345 ; X64-NEXT: je .LBB10_3
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
346 ; X64-NEXT: .LBB10_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
347 ; X64-NEXT: movl $1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
348 ; X64-NEXT: .LBB10_3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
349 ; X64-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
350 ; X64-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
351 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
352 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 5) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
353 %c = icmp ne i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
354 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
355 }
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
356
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
357 define i32 @length8(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
358 ; X86-LABEL: length8:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
359 ; X86: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
360 ; X86-NEXT: pushl %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
361 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
362 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
363 ; X86-NEXT: movl (%esi), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
364 ; X86-NEXT: movl (%eax), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
365 ; X86-NEXT: bswapl %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
366 ; X86-NEXT: bswapl %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
367 ; X86-NEXT: cmpl %edx, %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
368 ; X86-NEXT: jne .LBB11_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
369 ; X86-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
370 ; X86-NEXT: movl 4(%esi), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
371 ; X86-NEXT: movl 4(%eax), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
372 ; X86-NEXT: bswapl %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
373 ; X86-NEXT: bswapl %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
374 ; X86-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
375 ; X86-NEXT: cmpl %edx, %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
376 ; X86-NEXT: jne .LBB11_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
377 ; X86-NEXT: # BB#3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
378 ; X86-NEXT: popl %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
379 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
380 ; X86-NEXT: .LBB11_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
381 ; X86-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
382 ; X86-NEXT: cmpl %edx, %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
383 ; X86-NEXT: setae %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
384 ; X86-NEXT: leal -1(%eax,%eax), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
385 ; X86-NEXT: popl %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
386 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
387 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
388 ; X64-LABEL: length8:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
389 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
390 ; X64-NEXT: movq (%rdi), %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
391 ; X64-NEXT: movq (%rsi), %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
392 ; X64-NEXT: bswapq %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
393 ; X64-NEXT: bswapq %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
394 ; X64-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
395 ; X64-NEXT: cmpq %rdx, %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
396 ; X64-NEXT: seta %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
397 ; X64-NEXT: sbbl $0, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
398 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
399 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 8) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
400 ret i32 %m
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
401 }
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
402
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
403 define i1 @length8_eq(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
404 ; X86-LABEL: length8_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
405 ; X86: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
406 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
407 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
408 ; X86-NEXT: movl (%eax), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
409 ; X86-NEXT: cmpl (%ecx), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
410 ; X86-NEXT: jne .LBB12_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
411 ; X86-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
412 ; X86-NEXT: movl 4(%eax), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
413 ; X86-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
414 ; X86-NEXT: cmpl 4(%ecx), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
415 ; X86-NEXT: je .LBB12_3
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
416 ; X86-NEXT: .LBB12_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
417 ; X86-NEXT: movl $1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
418 ; X86-NEXT: .LBB12_3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
419 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
420 ; X86-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
421 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
422 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
423 ; X64-LABEL: length8_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
424 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
425 ; X64-NEXT: movq (%rdi), %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
426 ; X64-NEXT: cmpq (%rsi), %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
427 ; X64-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
428 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
429 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 8) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
430 %c = icmp eq i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
431 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
432 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
433
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
434 define i1 @length8_eq_const(i8* %X) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
435 ; X86-LABEL: length8_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
436 ; X86: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
437 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
438 ; X86-NEXT: cmpl $858927408, (%ecx) # imm = 0x33323130
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
439 ; X86-NEXT: jne .LBB13_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
440 ; X86-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
441 ; X86-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
442 ; X86-NEXT: cmpl $926299444, 4(%ecx) # imm = 0x37363534
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
443 ; X86-NEXT: je .LBB13_3
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
444 ; X86-NEXT: .LBB13_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
445 ; X86-NEXT: movl $1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
446 ; X86-NEXT: .LBB13_3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
447 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
448 ; X86-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
449 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
450 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
451 ; X64-LABEL: length8_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
452 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
453 ; X64-NEXT: movabsq $3978425819141910832, %rax # imm = 0x3736353433323130
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
454 ; X64-NEXT: cmpq %rax, (%rdi)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
455 ; X64-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
456 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
457 %m = tail call i32 @memcmp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 0), i64 8) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
458 %c = icmp ne i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
459 ret i1 %c
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
460 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
461
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
462 define i1 @length12_eq(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
463 ; X86-LABEL: length12_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
464 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
465 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
466 ; X86-NEXT: pushl $12
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
467 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
468 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
469 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
470 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
471 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
472 ; X86-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
473 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
474 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
475 ; X64-LABEL: length12_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
476 ; X64: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
477 ; X64-NEXT: movq (%rdi), %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
478 ; X64-NEXT: cmpq (%rsi), %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
479 ; X64-NEXT: jne .LBB14_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
480 ; X64-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
481 ; X64-NEXT: movl 8(%rdi), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
482 ; X64-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
483 ; X64-NEXT: cmpl 8(%rsi), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
484 ; X64-NEXT: je .LBB14_3
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
485 ; X64-NEXT: .LBB14_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
486 ; X64-NEXT: movl $1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
487 ; X64-NEXT: .LBB14_3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
488 ; X64-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
489 ; X64-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
490 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
491 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 12) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
492 %c = icmp ne i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
493 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
494 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
495
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
496 define i32 @length12(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
497 ; X86-LABEL: length12:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
498 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
499 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
500 ; X86-NEXT: pushl $12
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
501 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
502 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
503 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
504 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
505 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
506 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
507 ; X64-LABEL: length12:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
508 ; X64: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
509 ; X64-NEXT: movq (%rdi), %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
510 ; X64-NEXT: movq (%rsi), %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
511 ; X64-NEXT: bswapq %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
512 ; X64-NEXT: bswapq %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
513 ; X64-NEXT: cmpq %rdx, %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
514 ; X64-NEXT: jne .LBB15_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
515 ; X64-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
516 ; X64-NEXT: movl 8(%rdi), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
517 ; X64-NEXT: movl 8(%rsi), %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
518 ; X64-NEXT: bswapl %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
519 ; X64-NEXT: bswapl %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
520 ; X64-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
521 ; X64-NEXT: cmpq %rdx, %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
522 ; X64-NEXT: jne .LBB15_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
523 ; X64-NEXT: # BB#3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
524 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
525 ; X64-NEXT: .LBB15_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
526 ; X64-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
527 ; X64-NEXT: cmpq %rdx, %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
528 ; X64-NEXT: setae %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
529 ; X64-NEXT: leal -1(%rax,%rax), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
530 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
531 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 12) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
532 ret i32 %m
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
533 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
534
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
535 ; PR33329 - https://bugs.llvm.org/show_bug.cgi?id=33329
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
536
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
537 define i32 @length16(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
538 ; X86-LABEL: length16:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
539 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
540 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
541 ; X86-NEXT: pushl $16
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
542 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
543 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
544 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
545 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
546 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
547 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
548 ; X64-LABEL: length16:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
549 ; X64: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
550 ; X64-NEXT: movq (%rdi), %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
551 ; X64-NEXT: movq (%rsi), %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
552 ; X64-NEXT: bswapq %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
553 ; X64-NEXT: bswapq %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
554 ; X64-NEXT: cmpq %rdx, %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
555 ; X64-NEXT: jne .LBB16_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
556 ; X64-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
557 ; X64-NEXT: movq 8(%rdi), %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
558 ; X64-NEXT: movq 8(%rsi), %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
559 ; X64-NEXT: bswapq %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
560 ; X64-NEXT: bswapq %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
561 ; X64-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
562 ; X64-NEXT: cmpq %rdx, %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
563 ; X64-NEXT: jne .LBB16_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
564 ; X64-NEXT: # BB#3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
565 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
566 ; X64-NEXT: .LBB16_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
567 ; X64-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
568 ; X64-NEXT: cmpq %rdx, %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
569 ; X64-NEXT: setae %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
570 ; X64-NEXT: leal -1(%rax,%rax), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
571 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
572 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 16) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
573 ret i32 %m
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
574 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
575
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
576 define i1 @length16_eq(i8* %x, i8* %y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
577 ; X86-NOSSE-LABEL: length16_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
578 ; X86-NOSSE: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
579 ; X86-NOSSE-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
580 ; X86-NOSSE-NEXT: pushl $16
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
581 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
582 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
583 ; X86-NOSSE-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
584 ; X86-NOSSE-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
585 ; X86-NOSSE-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
586 ; X86-NOSSE-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
587 ; X86-NOSSE-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
588 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
589 ; X86-SSE1-LABEL: length16_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
590 ; X86-SSE1: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
591 ; X86-SSE1-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
592 ; X86-SSE1-NEXT: pushl $16
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
593 ; X86-SSE1-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
594 ; X86-SSE1-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
595 ; X86-SSE1-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
596 ; X86-SSE1-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
597 ; X86-SSE1-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
598 ; X86-SSE1-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
599 ; X86-SSE1-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
600 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
601 ; X86-SSE2-LABEL: length16_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
602 ; X86-SSE2: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
603 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
604 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %ecx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
605 ; X86-SSE2-NEXT: movdqu (%ecx), %xmm0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
606 ; X86-SSE2-NEXT: movdqu (%eax), %xmm1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
607 ; X86-SSE2-NEXT: pcmpeqb %xmm0, %xmm1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
608 ; X86-SSE2-NEXT: pmovmskb %xmm1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
609 ; X86-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
610 ; X86-SSE2-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
611 ; X86-SSE2-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
612 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
613 ; X64-LABEL: length16_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
614 ; X64: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
615 ; X64-NEXT: movq (%rdi), %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
616 ; X64-NEXT: cmpq (%rsi), %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
617 ; X64-NEXT: jne .LBB17_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
618 ; X64-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
619 ; X64-NEXT: movq 8(%rdi), %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
620 ; X64-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
621 ; X64-NEXT: cmpq 8(%rsi), %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
622 ; X64-NEXT: je .LBB17_3
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
623 ; X64-NEXT: .LBB17_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
624 ; X64-NEXT: movl $1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
625 ; X64-NEXT: .LBB17_3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
626 ; X64-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
627 ; X64-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
628 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
629 %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 16) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
630 %cmp = icmp ne i32 %call, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
631 ret i1 %cmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
632 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
633
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
634 define i1 @length16_eq_const(i8* %X) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
635 ; X86-NOSSE-LABEL: length16_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
636 ; X86-NOSSE: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
637 ; X86-NOSSE-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
638 ; X86-NOSSE-NEXT: pushl $16
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
639 ; X86-NOSSE-NEXT: pushl $.L.str
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
640 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
641 ; X86-NOSSE-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
642 ; X86-NOSSE-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
643 ; X86-NOSSE-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
644 ; X86-NOSSE-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
645 ; X86-NOSSE-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
646 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
647 ; X86-SSE1-LABEL: length16_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
648 ; X86-SSE1: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
649 ; X86-SSE1-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
650 ; X86-SSE1-NEXT: pushl $16
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
651 ; X86-SSE1-NEXT: pushl $.L.str
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
652 ; X86-SSE1-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
653 ; X86-SSE1-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
654 ; X86-SSE1-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
655 ; X86-SSE1-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
656 ; X86-SSE1-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
657 ; X86-SSE1-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
658 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
659 ; X86-SSE2-LABEL: length16_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
660 ; X86-SSE2: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
661 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
662 ; X86-SSE2-NEXT: movdqu (%eax), %xmm0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
663 ; X86-SSE2-NEXT: pcmpeqb {{\.LCPI.*}}, %xmm0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
664 ; X86-SSE2-NEXT: pmovmskb %xmm0, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
665 ; X86-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
666 ; X86-SSE2-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
667 ; X86-SSE2-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
668 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
669 ; X64-LABEL: length16_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
670 ; X64: # BB#0: # %loadbb
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
671 ; X64-NEXT: movabsq $3978425819141910832, %rax # imm = 0x3736353433323130
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
672 ; X64-NEXT: cmpq %rax, (%rdi)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
673 ; X64-NEXT: jne .LBB18_1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
674 ; X64-NEXT: # BB#2: # %loadbb1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
675 ; X64-NEXT: xorl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
676 ; X64-NEXT: movabsq $3833745473465760056, %rcx # imm = 0x3534333231303938
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
677 ; X64-NEXT: cmpq %rcx, 8(%rdi)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
678 ; X64-NEXT: je .LBB18_3
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
679 ; X64-NEXT: .LBB18_1: # %res_block
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
680 ; X64-NEXT: movl $1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
681 ; X64-NEXT: .LBB18_3: # %endblock
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
682 ; X64-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
683 ; X64-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
684 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
685 %m = tail call i32 @memcmp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 0), i64 16) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
686 %c = icmp eq i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
687 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
688 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
689
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
690 ; PR33914 - https://bugs.llvm.org/show_bug.cgi?id=33914
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
691
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
692 define i32 @length24(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
693 ; X86-LABEL: length24:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
694 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
695 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
696 ; X86-NEXT: pushl $24
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
697 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
698 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
699 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
700 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
701 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
702 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
703 ; X64-LABEL: length24:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
704 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
705 ; X64-NEXT: movl $24, %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
706 ; X64-NEXT: jmp memcmp # TAILCALL
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
707 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 24) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
708 ret i32 %m
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
709 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
710
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
711 define i1 @length24_eq(i8* %x, i8* %y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
712 ; X86-LABEL: length24_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
713 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
714 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
715 ; X86-NEXT: pushl $24
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
716 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
717 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
718 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
719 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
720 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
721 ; X86-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
722 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
723 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
724 ; X64-LABEL: length24_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
725 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
726 ; X64-NEXT: pushq %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
727 ; X64-NEXT: movl $24, %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
728 ; X64-NEXT: callq memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
729 ; X64-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
730 ; X64-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
731 ; X64-NEXT: popq %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
732 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
733 %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 24) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
734 %cmp = icmp eq i32 %call, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
735 ret i1 %cmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
736 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
737
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
738 define i1 @length24_eq_const(i8* %X) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
739 ; X86-LABEL: length24_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
740 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
741 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
742 ; X86-NEXT: pushl $24
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
743 ; X86-NEXT: pushl $.L.str
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
744 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
745 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
746 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
747 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
748 ; X86-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
749 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
750 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
751 ; X64-LABEL: length24_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
752 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
753 ; X64-NEXT: pushq %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
754 ; X64-NEXT: movl $.L.str, %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
755 ; X64-NEXT: movl $24, %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
756 ; X64-NEXT: callq memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
757 ; X64-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
758 ; X64-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
759 ; X64-NEXT: popq %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
760 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
761 %m = tail call i32 @memcmp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 0), i64 24) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
762 %c = icmp ne i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
763 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
764 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
765
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
766 define i32 @length32(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
767 ; X86-LABEL: length32:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
768 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
769 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
770 ; X86-NEXT: pushl $32
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
771 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
772 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
773 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
774 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
775 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
776 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
777 ; X64-LABEL: length32:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
778 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
779 ; X64-NEXT: movl $32, %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
780 ; X64-NEXT: jmp memcmp # TAILCALL
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
781 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 32) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
782 ret i32 %m
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
783 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
784
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
785 ; PR33325 - https://bugs.llvm.org/show_bug.cgi?id=33325
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
786
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
787 define i1 @length32_eq(i8* %x, i8* %y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
788 ; X86-LABEL: length32_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
789 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
790 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
791 ; X86-NEXT: pushl $32
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
792 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
793 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
794 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
795 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
796 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
797 ; X86-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
798 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
799 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
800 ; X64-SSE2-LABEL: length32_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
801 ; X64-SSE2: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
802 ; X64-SSE2-NEXT: pushq %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
803 ; X64-SSE2-NEXT: movl $32, %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
804 ; X64-SSE2-NEXT: callq memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
805 ; X64-SSE2-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
806 ; X64-SSE2-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
807 ; X64-SSE2-NEXT: popq %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
808 ; X64-SSE2-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
809 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
810 ; X64-AVX1-LABEL: length32_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
811 ; X64-AVX1: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
812 ; X64-AVX1-NEXT: movq 16(%rdi), %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
813 ; X64-AVX1-NEXT: movq (%rdi), %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
814 ; X64-AVX1-NEXT: movq 8(%rdi), %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
815 ; X64-AVX1-NEXT: movq 24(%rdi), %rdi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
816 ; X64-AVX1-NEXT: xorq 24(%rsi), %rdi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
817 ; X64-AVX1-NEXT: xorq 8(%rsi), %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
818 ; X64-AVX1-NEXT: orq %rdi, %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
819 ; X64-AVX1-NEXT: xorq 16(%rsi), %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
820 ; X64-AVX1-NEXT: xorq (%rsi), %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
821 ; X64-AVX1-NEXT: orq %rax, %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
822 ; X64-AVX1-NEXT: orq %rdx, %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
823 ; X64-AVX1-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
824 ; X64-AVX1-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
825 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
826 ; X64-AVX2-LABEL: length32_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
827 ; X64-AVX2: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
828 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
829 ; X64-AVX2-NEXT: vpcmpeqb (%rsi), %ymm0, %ymm0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
830 ; X64-AVX2-NEXT: vpmovmskb %ymm0, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
831 ; X64-AVX2-NEXT: cmpl $-1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
832 ; X64-AVX2-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
833 ; X64-AVX2-NEXT: vzeroupper
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
834 ; X64-AVX2-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
835 %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 32) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
836 %cmp = icmp eq i32 %call, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
837 ret i1 %cmp
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
838 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
839
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
840 define i1 @length32_eq_const(i8* %X) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
841 ; X86-LABEL: length32_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
842 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
843 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
844 ; X86-NEXT: pushl $32
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
845 ; X86-NEXT: pushl $.L.str
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
846 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
847 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
848 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
849 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
850 ; X86-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
851 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
852 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
853 ; X64-SSE2-LABEL: length32_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
854 ; X64-SSE2: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
855 ; X64-SSE2-NEXT: pushq %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
856 ; X64-SSE2-NEXT: movl $.L.str, %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
857 ; X64-SSE2-NEXT: movl $32, %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
858 ; X64-SSE2-NEXT: callq memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
859 ; X64-SSE2-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
860 ; X64-SSE2-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
861 ; X64-SSE2-NEXT: popq %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
862 ; X64-SSE2-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
863 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
864 ; X64-AVX1-LABEL: length32_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
865 ; X64-AVX1: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
866 ; X64-AVX1-NEXT: movabsq $3544395820347831604, %rax # imm = 0x3130393837363534
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
867 ; X64-AVX1-NEXT: xorq 24(%rdi), %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
868 ; X64-AVX1-NEXT: movabsq $3833745473465760056, %rcx # imm = 0x3534333231303938
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
869 ; X64-AVX1-NEXT: xorq 8(%rdi), %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
870 ; X64-AVX1-NEXT: orq %rax, %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
871 ; X64-AVX1-NEXT: movabsq $3689065127958034230, %rax # imm = 0x3332313039383736
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
872 ; X64-AVX1-NEXT: xorq 16(%rdi), %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
873 ; X64-AVX1-NEXT: movabsq $3978425819141910832, %rdx # imm = 0x3736353433323130
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
874 ; X64-AVX1-NEXT: xorq (%rdi), %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
875 ; X64-AVX1-NEXT: orq %rax, %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
876 ; X64-AVX1-NEXT: orq %rcx, %rdx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
877 ; X64-AVX1-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
878 ; X64-AVX1-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
879 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
880 ; X64-AVX2-LABEL: length32_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
881 ; X64-AVX2: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
882 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
883 ; X64-AVX2-NEXT: vpcmpeqb {{.*}}(%rip), %ymm0, %ymm0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
884 ; X64-AVX2-NEXT: vpmovmskb %ymm0, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
885 ; X64-AVX2-NEXT: cmpl $-1, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
886 ; X64-AVX2-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
887 ; X64-AVX2-NEXT: vzeroupper
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
888 ; X64-AVX2-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
889 %m = tail call i32 @memcmp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 0), i64 32) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
890 %c = icmp ne i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
891 ret i1 %c
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
892 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
893
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
894 define i32 @length64(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
895 ; X86-LABEL: length64:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
896 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
897 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
898 ; X86-NEXT: pushl $64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
899 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
900 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
901 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
902 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
903 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
904 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
905 ; X64-LABEL: length64:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
906 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
907 ; X64-NEXT: movl $64, %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
908 ; X64-NEXT: jmp memcmp # TAILCALL
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
909 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 64) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
910 ret i32 %m
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
911 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
912
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
913 define i1 @length64_eq(i8* %x, i8* %y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
914 ; X86-LABEL: length64_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
915 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
916 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
917 ; X86-NEXT: pushl $64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
918 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
919 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
920 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
921 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
922 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
923 ; X86-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
924 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
925 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
926 ; X64-LABEL: length64_eq:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
927 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
928 ; X64-NEXT: pushq %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
929 ; X64-NEXT: movl $64, %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
930 ; X64-NEXT: callq memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
931 ; X64-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
932 ; X64-NEXT: setne %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
933 ; X64-NEXT: popq %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
934 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
935 %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 64) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
936 %cmp = icmp ne i32 %call, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
937 ret i1 %cmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
938 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
939
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
940 define i1 @length64_eq_const(i8* %X) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
941 ; X86-LABEL: length64_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
942 ; X86: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
943 ; X86-NEXT: pushl $0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
944 ; X86-NEXT: pushl $64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
945 ; X86-NEXT: pushl $.L.str
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
946 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
947 ; X86-NEXT: calll memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
948 ; X86-NEXT: addl $16, %esp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
949 ; X86-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
950 ; X86-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
951 ; X86-NEXT: retl
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
952 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
953 ; X64-LABEL: length64_eq_const:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
954 ; X64: # BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
955 ; X64-NEXT: pushq %rax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
956 ; X64-NEXT: movl $.L.str, %esi
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
957 ; X64-NEXT: movl $64, %edx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
958 ; X64-NEXT: callq memcmp
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
959 ; X64-NEXT: testl %eax, %eax
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
960 ; X64-NEXT: sete %al
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
961 ; X64-NEXT: popq %rcx
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
962 ; X64-NEXT: retq
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
963 %m = tail call i32 @memcmp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 0), i64 64) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
964 %c = icmp eq i32 %m, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
965 ret i1 %c
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
966 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
967
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
968 ; This checks that we do not do stupid things with huge sizes.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
969 define i32 @huge_length(i8* %X, i8* %Y) nounwind {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
970 %m = tail call i32 @memcmp(i8* %X, i8* %Y, i64 9223372036854775807) nounwind
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
971 ret i32 %m
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
972 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
973
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
974