blob: f4bc1bb7015a0555ba025608002d2703c9352f2c [file] [log] [blame]
NAKAMURA Takumidb264992011-02-22 07:20:52 +00001; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s
2; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s
Chris Lattner8047d9a2009-12-24 00:37:38 +00003
4; This tests codegen time inlining/optimization of memcmp
5; rdar://6480398
6
Chris Lattner04b091a2009-12-24 01:07:17 +00007@.str = private constant [23 x i8] c"fooooooooooooooooooooo\00", align 1 ; <[23 x i8]*> [#uses=1]
Chris Lattner8047d9a2009-12-24 00:37:38 +00008
9declare i32 @memcmp(...)
10
11define void @memcmp2(i8* %X, i8* %Y, i32* nocapture %P) nounwind {
12entry:
13 %0 = tail call i32 (...)* @memcmp(i8* %X, i8* %Y, i32 2) nounwind ; <i32> [#uses=1]
14 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
15 br i1 %1, label %return, label %bb
16
17bb: ; preds = %entry
18 store i32 4, i32* %P, align 4
19 ret void
20
21return: ; preds = %entry
22 ret void
23; CHECK: memcmp2:
NAKAMURA Takumidb264992011-02-22 07:20:52 +000024; CHECK: movw ([[A0:%rdi|%rcx]]), %ax
25; CHECK: cmpw ([[A1:%rsi|%rdx]]), %ax
Chris Lattner8047d9a2009-12-24 00:37:38 +000026}
27
28define void @memcmp2a(i8* %X, i32* nocapture %P) nounwind {
29entry:
Chris Lattner04b091a2009-12-24 01:07:17 +000030 %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 Lattner8047d9a2009-12-24 00:37:38 +000031 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
32 br i1 %1, label %return, label %bb
33
34bb: ; preds = %entry
35 store i32 4, i32* %P, align 4
36 ret void
37
38return: ; preds = %entry
39 ret void
40; CHECK: memcmp2a:
NAKAMURA Takumidb264992011-02-22 07:20:52 +000041; CHECK: cmpw $28527, ([[A0]])
Chris Lattner8047d9a2009-12-24 00:37:38 +000042}
43
44
45define void @memcmp4(i8* %X, i8* %Y, i32* nocapture %P) nounwind {
46entry:
47 %0 = tail call i32 (...)* @memcmp(i8* %X, i8* %Y, i32 4) nounwind ; <i32> [#uses=1]
48 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
49 br i1 %1, label %return, label %bb
50
51bb: ; preds = %entry
52 store i32 4, i32* %P, align 4
53 ret void
54
55return: ; preds = %entry
56 ret void
57; CHECK: memcmp4:
NAKAMURA Takumidb264992011-02-22 07:20:52 +000058; CHECK: movl ([[A0]]), %eax
59; CHECK: cmpl ([[A1]]), %eax
Chris Lattner8047d9a2009-12-24 00:37:38 +000060}
61
62define void @memcmp4a(i8* %X, i32* nocapture %P) nounwind {
63entry:
Chris Lattner04b091a2009-12-24 01:07:17 +000064 %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 Lattner8047d9a2009-12-24 00:37:38 +000065 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
66 br i1 %1, label %return, label %bb
67
68bb: ; preds = %entry
69 store i32 4, i32* %P, align 4
70 ret void
71
72return: ; preds = %entry
73 ret void
74; CHECK: memcmp4a:
NAKAMURA Takumidb264992011-02-22 07:20:52 +000075; CHECK: cmpl $1869573999, ([[A0]])
Chris Lattner04b091a2009-12-24 01:07:17 +000076}
77
78define void @memcmp8(i8* %X, i8* %Y, i32* nocapture %P) nounwind {
79entry:
80 %0 = tail call i32 (...)* @memcmp(i8* %X, i8* %Y, i32 8) nounwind ; <i32> [#uses=1]
81 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
82 br i1 %1, label %return, label %bb
83
84bb: ; preds = %entry
85 store i32 4, i32* %P, align 4
86 ret void
87
88return: ; preds = %entry
89 ret void
90; CHECK: memcmp8:
NAKAMURA Takumidb264992011-02-22 07:20:52 +000091; CHECK: movq ([[A0]]), %rax
92; CHECK: cmpq ([[A1]]), %rax
Chris Lattner04b091a2009-12-24 01:07:17 +000093}
94
95define void @memcmp8a(i8* %X, i32* nocapture %P) nounwind {
96entry:
97 %0 = tail call i32 (...)* @memcmp(i8* %X, i8* getelementptr inbounds ([23 x i8]* @.str, i32 0, i32 0), i32 8) nounwind ; <i32> [#uses=1]
98 %1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
99 br i1 %1, label %return, label %bb
100
101bb: ; preds = %entry
102 store i32 4, i32* %P, align 4
103 ret void
104
105return: ; preds = %entry
106 ret void
107; CHECK: memcmp8a:
108; CHECK: movabsq $8029759185026510694, %rax
NAKAMURA Takumidb264992011-02-22 07:20:52 +0000109; CHECK: cmpq %rax, ([[A0]])
Chris Lattner8047d9a2009-12-24 00:37:38 +0000110}
111