blob: 723d1d89427ee261c6e055bdef05da3108477ea0 [file] [log] [blame]
NAKAMURA Takumie463e072011-02-22 07:20:52 +00001; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s
Bob Wilsonfa594852012-08-03 21:26:18 +00002; RUN: llc < %s -disable-simplify-libcalls -mtriple=x86_64-linux | FileCheck %s --check-prefix=NOBUILTIN
NAKAMURA Takumie463e072011-02-22 07:20:52 +00003; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s
Chris Lattner1a32ede2009-12-24 00:37:38 +00004
5; This tests codegen time inlining/optimization of memcmp
6; rdar://6480398
7
Chris Lattnerf5e3ed62009-12-24 01:07:17 +00008@.str = private constant [23 x i8] c"fooooooooooooooooooooo\00", align 1 ; <[23 x i8]*> [#uses=1]
Chris Lattner1a32ede2009-12-24 00:37:38 +00009
10declare i32 @memcmp(...)
11
12define void @memcmp2(i8* %X, i8* %Y, i32* nocapture %P) nounwind {
13entry:
14 %0 = tail call i32 (...)* @memcmp(i8* %X, i8* %Y, i32 2) nounwind ; <i32> [#uses=1]
15 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
16 br i1 %1, label %return, label %bb
17
18bb: ; preds = %entry
19 store i32 4, i32* %P, align 4
20 ret void
21
22return: ; preds = %entry
23 ret void
24; CHECK: memcmp2:
NAKAMURA Takumie463e072011-02-22 07:20:52 +000025; CHECK: movw ([[A0:%rdi|%rcx]]), %ax
26; CHECK: cmpw ([[A1:%rsi|%rdx]]), %ax
Bob Wilsonfa594852012-08-03 21:26:18 +000027; NOBUILTIN: memcmp2:
28; NOBUILTIN: callq
Chris Lattner1a32ede2009-12-24 00:37:38 +000029}
30
31define void @memcmp2a(i8* %X, i32* nocapture %P) nounwind {
32entry:
Chris Lattnerf5e3ed62009-12-24 01:07:17 +000033 %0 = tail call i32 (...)* @memcmp(i8* %X, i8* getelementptr inbounds ([23 x i8]* @.str, i32 0, i32 1), i32 2) nounwind ; <i32> [#uses=1]
Chris Lattner1a32ede2009-12-24 00:37:38 +000034 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
35 br i1 %1, label %return, label %bb
36
37bb: ; preds = %entry
38 store i32 4, i32* %P, align 4
39 ret void
40
41return: ; preds = %entry
42 ret void
43; CHECK: memcmp2a:
NAKAMURA Takumie463e072011-02-22 07:20:52 +000044; CHECK: cmpw $28527, ([[A0]])
Chris Lattner1a32ede2009-12-24 00:37:38 +000045}
46
47
48define void @memcmp4(i8* %X, i8* %Y, i32* nocapture %P) nounwind {
49entry:
50 %0 = tail call i32 (...)* @memcmp(i8* %X, i8* %Y, i32 4) nounwind ; <i32> [#uses=1]
51 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
52 br i1 %1, label %return, label %bb
53
54bb: ; preds = %entry
55 store i32 4, i32* %P, align 4
56 ret void
57
58return: ; preds = %entry
59 ret void
60; CHECK: memcmp4:
NAKAMURA Takumie463e072011-02-22 07:20:52 +000061; CHECK: movl ([[A0]]), %eax
62; CHECK: cmpl ([[A1]]), %eax
Chris Lattner1a32ede2009-12-24 00:37:38 +000063}
64
65define void @memcmp4a(i8* %X, i32* nocapture %P) nounwind {
66entry:
Chris Lattnerf5e3ed62009-12-24 01:07:17 +000067 %0 = tail call i32 (...)* @memcmp(i8* %X, i8* getelementptr inbounds ([23 x i8]* @.str, i32 0, i32 1), i32 4) nounwind ; <i32> [#uses=1]
Chris Lattner1a32ede2009-12-24 00:37:38 +000068 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
69 br i1 %1, label %return, label %bb
70
71bb: ; preds = %entry
72 store i32 4, i32* %P, align 4
73 ret void
74
75return: ; preds = %entry
76 ret void
77; CHECK: memcmp4a:
NAKAMURA Takumie463e072011-02-22 07:20:52 +000078; CHECK: cmpl $1869573999, ([[A0]])
Chris Lattnerf5e3ed62009-12-24 01:07:17 +000079}
80
81define void @memcmp8(i8* %X, i8* %Y, i32* nocapture %P) nounwind {
82entry:
83 %0 = tail call i32 (...)* @memcmp(i8* %X, i8* %Y, i32 8) nounwind ; <i32> [#uses=1]
84 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
85 br i1 %1, label %return, label %bb
86
87bb: ; preds = %entry
88 store i32 4, i32* %P, align 4
89 ret void
90
91return: ; preds = %entry
92 ret void
93; CHECK: memcmp8:
NAKAMURA Takumie463e072011-02-22 07:20:52 +000094; CHECK: movq ([[A0]]), %rax
95; CHECK: cmpq ([[A1]]), %rax
Chris Lattnerf5e3ed62009-12-24 01:07:17 +000096}
97
98define void @memcmp8a(i8* %X, i32* nocapture %P) nounwind {
99entry:
100 %0 = tail call i32 (...)* @memcmp(i8* %X, i8* getelementptr inbounds ([23 x i8]* @.str, i32 0, i32 0), i32 8) nounwind ; <i32> [#uses=1]
101 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
102 br i1 %1, label %return, label %bb
103
104bb: ; preds = %entry
105 store i32 4, i32* %P, align 4
106 ret void
107
108return: ; preds = %entry
109 ret void
110; CHECK: memcmp8a:
111; CHECK: movabsq $8029759185026510694, %rax
NAKAMURA Takumie463e072011-02-22 07:20:52 +0000112; CHECK: cmpq %rax, ([[A0]])
Chris Lattner1a32ede2009-12-24 00:37:38 +0000113}
114