blob: 7cec2a1331dc8b0b6476cdf053d4cfb267907da8 [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
Zaara Syeda3a7578c2017-05-31 17:12:38 +000016; CHECK-NEXT: li [[LI2:[0-9]+]], -1
Sanjay Patel4b23fa02017-06-27 23:15:01 +000017; CHECK-NEXT: cmpld [[LOAD1]], [[LOAD2]]
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
Zaara Syeda3a7578c2017-05-31 17:12:38 +000020; CHECK-NEXT: blr
21}
22
23; Check size 4
24; Function Attrs: nounwind readonly
25define signext i32 @test2(i32* nocapture readonly %buffer1, i32* nocapture readonly %buffer2) local_unnamed_addr #0 {
26entry:
27 %0 = bitcast i32* %buffer1 to i8*
28 %1 = bitcast i32* %buffer2 to i8*
29 %call = tail call signext i32 @memcmp(i8* %0, i8* %1, i64 4) #2
30 ret i32 %call
31
32; CHECK-LABEL: @test2
33; CHECK: lwbrx [[LOAD1:[0-9]+]]
34; CHECK-NEXT: lwbrx [[LOAD2:[0-9]+]]
35; CHECK-NEXT: li [[LI:[0-9]+]], 1
Zaara Syeda3a7578c2017-05-31 17:12:38 +000036; CHECK-NEXT: li [[LI2:[0-9]+]], -1
Sanjay Patel4b23fa02017-06-27 23:15:01 +000037; CHECK-NEXT: cmplw [[LOAD1]], [[LOAD2]]
Sanjay Patel70b36f12017-06-27 21:46:34 +000038; CHECK-NEXT: isel [[ISEL:[0-9]+]], [[LI2]], [[LI]], 0
Zaara Syeda3a7578c2017-05-31 17:12:38 +000039; CHECK-NEXT: isel [[ISEL2:[0-9]+]], 0, [[ISEL]], 2
Zaara Syeda3a7578c2017-05-31 17:12:38 +000040; CHECK-NEXT: blr
41}
42
43; Check size 2
44; Function Attrs: nounwind readonly
45define signext i32 @test3(i32* nocapture readonly %buffer1, i32* nocapture readonly %buffer2) local_unnamed_addr #0 {
46entry:
47 %0 = bitcast i32* %buffer1 to i8*
48 %1 = bitcast i32* %buffer2 to i8*
49 %call = tail call signext i32 @memcmp(i8* %0, i8* %1, i64 2) #2
50 ret i32 %call
51
52; CHECK-LABEL: @test3
53; CHECK: lhbrx [[LOAD1:[0-9]+]]
54; CHECK-NEXT: lhbrx [[LOAD2:[0-9]+]]
55; CHECK-NEXT: li [[LI:[0-9]+]], 1
Zaara Syeda3a7578c2017-05-31 17:12:38 +000056; CHECK-NEXT: li [[LI2:[0-9]+]], -1
Sanjay Patel4b23fa02017-06-27 23:15:01 +000057; CHECK-NEXT: cmplw [[LOAD1]], [[LOAD2]]
Sanjay Patel70b36f12017-06-27 21:46:34 +000058; CHECK-NEXT: isel [[ISEL:[0-9]+]], [[LI2]], [[LI]], 0
Zaara Syeda3a7578c2017-05-31 17:12:38 +000059; CHECK-NEXT: isel [[ISEL2:[0-9]+]], 0, [[ISEL]], 2
Zaara Syeda3a7578c2017-05-31 17:12:38 +000060; CHECK-NEXT: blr
61}
62
63; Check size 1
64; Function Attrs: nounwind readonly
65define signext i32 @test4(i32* nocapture readonly %buffer1, i32* nocapture readonly %buffer2) local_unnamed_addr #0 {
66entry:
67 %0 = bitcast i32* %buffer1 to i8*
68 %1 = bitcast i32* %buffer2 to i8*
69 %call = tail call signext i32 @memcmp(i8* %0, i8* %1, i64 1) #2
70 ret i32 %call
71
72; CHECK-LABEL: @test4
73; CHECK: lbz [[LOAD1:[0-9]+]]
74; CHECK-NEXT: lbz [[LOAD2:[0-9]+]]
Sanjay Patel4b23fa02017-06-27 23:15:01 +000075; CHECK-NEXT: li [[LI:[0-9]+]], 1
76; CHECK-NEXT: li [[LI2:[0-9]+]], -1
77; CHECK-NEXT: cmplw [[LOAD1]], [[LOAD2]]
78; CHECK-NEXT: isel [[ISEL:[0-9]+]], [[LI2]], [[LI]], 0
79; CHECK-NEXT: isel [[ISEL2:[0-9]+]], 0, [[ISEL]], 2
Zaara Syeda3a7578c2017-05-31 17:12:38 +000080; CHECK-NEXT: blr
81}
82
83; Function Attrs: nounwind readonly
84declare signext i32 @memcmp(i8*, i8*, i64) #1