blob: 039c48b2a96ac0128b51a40c1739ffab82a49c18 [file] [log] [blame]
Zaara Syeda3a7578c2017-05-31 17:12:38 +00001; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple=powerpc64le-unknown-gnu-linux < %s | FileCheck %s -check-prefix=CHECK
2
3; Check size 8
4; Function Attrs: nounwind readonly
5define signext i32 @test1(i32* nocapture readonly %buffer1, i32* nocapture readonly %buffer2) local_unnamed_addr #0 {
6entry:
7 %0 = bitcast i32* %buffer1 to i8*
8 %1 = bitcast i32* %buffer2 to i8*
9 %call = tail call signext i32 @memcmp(i8* %0, i8* %1, i64 8) #2
10 ret i32 %call
11
12; CHECK-LABEL: @test1
13; CHECK: ldbrx [[LOAD1:[0-9]+]]
14; CHECK-NEXT: ldbrx [[LOAD2:[0-9]+]]
15; CHECK-NEXT: li [[LI:[0-9]+]], 1
Sanjay Patel70b36f12017-06-27 21:46:34 +000016; CHECK-NEXT: cmpld [[LOAD1]], [[LOAD2]]
Zaara Syeda3a7578c2017-05-31 17:12:38 +000017; CHECK-NEXT: li [[LI2:[0-9]+]], -1
Sanjay Patel70b36f12017-06-27 21:46:34 +000018; CHECK-NEXT: isel [[ISEL:[0-9]+]], [[LI2]], [[LI]], 0
Zaara Syeda3a7578c2017-05-31 17:12:38 +000019; CHECK-NEXT: isel [[ISEL2:[0-9]+]], 0, [[ISEL]], 2
20; CHECK-NEXT: extsw 3, [[ISEL2]]
21; CHECK-NEXT: blr
22}
23
24; Check size 4
25; Function Attrs: nounwind readonly
26define signext i32 @test2(i32* nocapture readonly %buffer1, i32* nocapture readonly %buffer2) local_unnamed_addr #0 {
27entry:
28 %0 = bitcast i32* %buffer1 to i8*
29 %1 = bitcast i32* %buffer2 to i8*
30 %call = tail call signext i32 @memcmp(i8* %0, i8* %1, i64 4) #2
31 ret i32 %call
32
33; CHECK-LABEL: @test2
34; CHECK: lwbrx [[LOAD1:[0-9]+]]
35; CHECK-NEXT: lwbrx [[LOAD2:[0-9]+]]
36; CHECK-NEXT: li [[LI:[0-9]+]], 1
Sanjay Patel70b36f12017-06-27 21:46:34 +000037; CHECK-NEXT: cmpld [[LOAD1]], [[LOAD2]]
Zaara Syeda3a7578c2017-05-31 17:12:38 +000038; CHECK-NEXT: li [[LI2:[0-9]+]], -1
Sanjay Patel70b36f12017-06-27 21:46:34 +000039; CHECK-NEXT: isel [[ISEL:[0-9]+]], [[LI2]], [[LI]], 0
Zaara Syeda3a7578c2017-05-31 17:12:38 +000040; CHECK-NEXT: isel [[ISEL2:[0-9]+]], 0, [[ISEL]], 2
41; CHECK-NEXT: extsw 3, [[ISEL2]]
42; CHECK-NEXT: blr
43}
44
45; Check size 2
46; Function Attrs: nounwind readonly
47define signext i32 @test3(i32* nocapture readonly %buffer1, i32* nocapture readonly %buffer2) local_unnamed_addr #0 {
48entry:
49 %0 = bitcast i32* %buffer1 to i8*
50 %1 = bitcast i32* %buffer2 to i8*
51 %call = tail call signext i32 @memcmp(i8* %0, i8* %1, i64 2) #2
52 ret i32 %call
53
54; CHECK-LABEL: @test3
55; CHECK: lhbrx [[LOAD1:[0-9]+]]
56; CHECK-NEXT: lhbrx [[LOAD2:[0-9]+]]
57; CHECK-NEXT: li [[LI:[0-9]+]], 1
Sanjay Patel70b36f12017-06-27 21:46:34 +000058; CHECK-NEXT: cmpld [[LOAD1]], [[LOAD2]]
Zaara Syeda3a7578c2017-05-31 17:12:38 +000059; CHECK-NEXT: li [[LI2:[0-9]+]], -1
Sanjay Patel70b36f12017-06-27 21:46:34 +000060; CHECK-NEXT: isel [[ISEL:[0-9]+]], [[LI2]], [[LI]], 0
Zaara Syeda3a7578c2017-05-31 17:12:38 +000061; CHECK-NEXT: isel [[ISEL2:[0-9]+]], 0, [[ISEL]], 2
62; CHECK-NEXT: extsw 3, [[ISEL2]]
63; CHECK-NEXT: blr
64}
65
66; Check size 1
67; Function Attrs: nounwind readonly
68define signext i32 @test4(i32* nocapture readonly %buffer1, i32* nocapture readonly %buffer2) local_unnamed_addr #0 {
69entry:
70 %0 = bitcast i32* %buffer1 to i8*
71 %1 = bitcast i32* %buffer2 to i8*
72 %call = tail call signext i32 @memcmp(i8* %0, i8* %1, i64 1) #2
73 ret i32 %call
74
75; CHECK-LABEL: @test4
76; CHECK: lbz [[LOAD1:[0-9]+]]
77; CHECK-NEXT: lbz [[LOAD2:[0-9]+]]
78; CHECK-NEXT: subf [[SUB:[0-9]+]], [[LOAD2]], [[LOAD1]]
79; CHECK-NEXT: extsw 3, [[SUB]]
80; CHECK-NEXT: blr
81}
82
83; Function Attrs: nounwind readonly
84declare signext i32 @memcmp(i8*, i8*, i64) #1