brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · 974b8bd Raw
142 lines · plain
1; RUN: llc -o - -mtriple=powerpc64le-unknown-gnu-linux -stop-after codegenprepare %s | FileCheck %s2; RUN: llc -o - -mtriple=powerpc64-unknown-gnu-linux -stop-after codegenprepare %s | FileCheck %s --check-prefix=CHECK-BE3 4define signext i32 @test1(ptr nocapture readonly %buffer1, ptr nocapture readonly %buffer2)  {5entry:6  ; CHECK-LABEL: @test1(7  ; CHECK: [[LOAD0:%[0-9]+]] = load i128, ptr %buffer1, align 18  ; CHECK-NEXT:  [[LOAD1:%[0-9]+]] = load i128, ptr %buffer2, align 19  ; CHECK-NEXT:  [[CALL1:%[0-9]+]] = call i128 @llvm.bswap.i128(i128 [[LOAD0]])10  ; CHECK-NEXT:  [[CALL2:%[0-9]+]] = call i128 @llvm.bswap.i128(i128 [[LOAD1]])11  ; CHECK-NEXT:  [[CALL3:%[0-9]+]] = call i32 @llvm.ucmp.i32.i128(i128 [[CALL1]], i128 [[CALL2]])12  ; CHECK-NEXT:  ret i32 [[CALL3]]13		  14		  15  ; CHECK-BE-LABEL: @test1(16  ; CHECK-BE: [[LOAD0:%[0-9]+]] = load i128, ptr %buffer1, align 117  ; CHECK-BE-NEXT:  [[LOAD1:%[0-9]+]] = load i128, ptr %buffer2, align 118  ; CHECK-BE-NEXT:  [[CALL0:%[0-9]+]] = call i32 @llvm.ucmp.i32.i128(i128 [[LOAD0]], i128 [[LOAD1]])19  ; CHECK-BE-NEXT:   ret i32 [[CALL0]]20 21  %call = tail call signext i32 @memcmp(ptr %buffer1, ptr %buffer2, i64 16)22  ret i32 %call23}24 25declare signext i32 @memcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #126 27define signext i32 @test2(ptr nocapture readonly %buffer1, ptr nocapture readonly %buffer2)  {28  ; CHECK-LABEL: @test2(29  ; CHECK: [[LOAD1:%[0-9]+]] = load i32, ptr30  ; CHECK-NEXT: [[LOAD2:%[0-9]+]] = load i32, ptr31  ; CHECK-NEXT: [[BSWAP1:%[0-9]+]] = call i32 @llvm.bswap.i32(i32 [[LOAD1]])32  ; CHECK-NEXT: [[BSWAP2:%[0-9]+]] = call i32 @llvm.bswap.i32(i32 [[LOAD2]])33  ; CHECK-NEXT: [[UCMP:%[0-9]+]] = call i32 @llvm.ucmp.i32.i32(i32 [[BSWAP1]], i32 [[BSWAP2]])34  ; CHECK-NEXT: ret i32 [[UCMP]]35 36  ; CHECK-BE-LABEL: @test2(37  ; CHECK-BE: [[LOAD1:%[0-9]+]] = load i32, ptr38  ; CHECK-BE-NEXT: [[LOAD2:%[0-9]+]] = load i32, ptr39  ; CHECK-BE-NEXT: [[UCMP:%[0-9]+]] = call i32 @llvm.ucmp.i32.i32(i32 [[LOAD1]], i32 [[LOAD2]])40  ; CHECK-BE-NEXT: ret i32 [[UCMP]]41 42entry:43  %call = tail call signext i32 @memcmp(ptr %buffer1, ptr %buffer2, i64 4)44  ret i32 %call45}46 47define signext i32 @test3(ptr nocapture readonly %buffer1, ptr nocapture readonly %buffer2)  {48  ; CHECK-LABEL: res_block:{{.*}}49  ; CHECK: [[ICMP2:%[0-9]+]] = icmp ult i6450  ; CHECK-NEXT: [[SELECT:%[0-9]+]] = select i1 [[ICMP2]], i32 -1, i32 151  ; CHECK-NEXT: br label %endblock52 53  ; CHECK-LABEL: loadbb:{{.*}}54  ; CHECK: [[LOAD1:%[0-9]+]] = load i64, ptr55  ; CHECK-NEXT: [[LOAD2:%[0-9]+]] = load i64, ptr56  ; CHECK-NEXT: [[BSWAP1:%[0-9]+]] = call i64 @llvm.bswap.i64(i64 [[LOAD1]])57  ; CHECK-NEXT: [[BSWAP2:%[0-9]+]] = call i64 @llvm.bswap.i64(i64 [[LOAD2]])58  ; CHECK-NEXT: [[ICMP:%[0-9]+]] = icmp eq i64 [[BSWAP1]], [[BSWAP2]]59  ; CHECK-NEXT:  br i1 [[ICMP]], label %loadbb1, label %res_block60 61  ; CHECK-LABEL: loadbb1:{{.*}}62  ; CHECK: [[LOAD1:%[0-9]+]] = load i32, ptr63  ; CHECK-NEXT: [[LOAD2:%[0-9]+]] = load i32, ptr64  ; CHECK-NEXT: [[BSWAP1:%[0-9]+]] = call i32 @llvm.bswap.i32(i32 [[LOAD1]])65  ; CHECK-NEXT: [[BSWAP2:%[0-9]+]] = call i32 @llvm.bswap.i32(i32 [[LOAD2]])66  ; CHECK-NEXT: [[ZEXT1:%[0-9]+]] = zext i32 [[BSWAP1]] to i6467  ; CHECK-NEXT: [[ZEXT2:%[0-9]+]] = zext i32 [[BSWAP2]] to i6468  ; CHECK-NEXT: [[ICMP:%[0-9]+]] = icmp eq i64 [[ZEXT1]], [[ZEXT2]]69  ; CHECK-NEXT:  br i1 [[ICMP]], label %loadbb2, label %res_block70 71  ; CHECK-LABEL: loadbb2:{{.*}}72  ; CHECK: [[LOAD1:%[0-9]+]] = load i16, ptr73  ; CHECK-NEXT: [[LOAD2:%[0-9]+]] = load i16, ptr74  ; CHECK-NEXT: [[BSWAP1:%[0-9]+]] = call i16 @llvm.bswap.i16(i16 [[LOAD1]])75  ; CHECK-NEXT: [[BSWAP2:%[0-9]+]] = call i16 @llvm.bswap.i16(i16 [[LOAD2]])76  ; CHECK-NEXT: [[ZEXT1:%[0-9]+]] = zext i16 [[BSWAP1]] to i6477  ; CHECK-NEXT: [[ZEXT2:%[0-9]+]] = zext i16 [[BSWAP2]] to i6478  ; CHECK-NEXT: [[ICMP:%[0-9]+]] = icmp eq i64 [[ZEXT1]], [[ZEXT2]]79  ; CHECK-NEXT:  br i1 [[ICMP]], label %loadbb3, label %res_block80 81  ; CHECK-LABEL: loadbb3:{{.*}}82  ; CHECK: [[LOAD1:%[0-9]+]] = load i8, ptr83  ; CHECK-NEXT: [[LOAD2:%[0-9]+]] = load i8, ptr84  ; CHECK-NEXT: [[ZEXT1:%[0-9]+]] = zext i8 [[LOAD1]] to i3285  ; CHECK-NEXT: [[ZEXT2:%[0-9]+]] = zext i8 [[LOAD2]] to i3286  ; CHECK-NEXT: [[SUB:%[0-9]+]] = sub i32 [[ZEXT1]], [[ZEXT2]]87  ; CHECK-NEXT:  br label %endblock88 89  ; CHECK-BE-LABEL: res_block:{{.*}}90  ; CHECK-BE: [[ICMP2:%[0-9]+]] = icmp ult i6491  ; CHECK-BE-NEXT: [[SELECT:%[0-9]+]] = select i1 [[ICMP2]], i32 -1, i32 192  ; CHECK-BE-NEXT: br label %endblock93 94  ; CHECK-BE-LABEL: loadbb:{{.*}}95  ; CHECK-BE: [[LOAD1:%[0-9]+]] = load i64, ptr96  ; CHECK-BE-NEXT: [[LOAD2:%[0-9]+]] = load i64, ptr97  ; CHECK-BE-NEXT: [[ICMP:%[0-9]+]] = icmp eq i64 [[LOAD1]], [[LOAD2]]98  ; CHECK-BE-NEXT:  br i1 [[ICMP]], label %loadbb1, label %res_block99 100  ; CHECK-BE: [[LOAD1:%[0-9]+]] = load i32, ptr101  ; CHECK-BE-NEXT: [[LOAD2:%[0-9]+]] = load i32, ptr102  ; CHECK-BE-NEXT: [[ZEXT1:%[0-9]+]] = zext i32 [[LOAD1]] to i64103  ; CHECK-BE-NEXT: [[ZEXT2:%[0-9]+]] = zext i32 [[LOAD2]] to i64104  ; CHECK-BE-NEXT: [[ICMP:%[0-9]+]] = icmp eq i64 [[ZEXT1]], [[ZEXT2]]105  ; CHECK-BE-NEXT:  br i1 [[ICMP]], label %loadbb2, label %res_block106 107  ; CHECK-BE: [[LOAD1:%[0-9]+]] = load i16, ptr108  ; CHECK-BE-NEXT: [[LOAD2:%[0-9]+]] = load i16, ptr109  ; CHECK-BE-NEXT: [[ZEXT1:%[0-9]+]] = zext i16 [[LOAD1]] to i64110  ; CHECK-BE-NEXT: [[ZEXT2:%[0-9]+]] = zext i16 [[LOAD2]] to i64111  ; CHECK-BE-NEXT: [[ICMP:%[0-9]+]] = icmp eq i64 [[ZEXT1]], [[ZEXT2]]112  ; CHECK-BE-NEXT:  br i1 [[ICMP]], label %loadbb3, label %res_block113 114  ; CHECK-BE: [[LOAD1:%[0-9]+]] = load i8, ptr115  ; CHECK-BE-NEXT: [[LOAD2:%[0-9]+]] = load i8, ptr116  ; CHECK-BE-NEXT: [[ZEXT1:%[0-9]+]] = zext i8 [[LOAD1]] to i32117  ; CHECK-BE-NEXT: [[ZEXT2:%[0-9]+]] = zext i8 [[LOAD2]] to i32118  ; CHECK-BE-NEXT: [[SUB:%[0-9]+]] = sub i32 [[ZEXT1]], [[ZEXT2]]119  ; CHECK-BE-NEXT:  br label %endblock120 121entry:122  %call = tail call signext i32 @memcmp(ptr %buffer1, ptr %buffer2, i64 15)123  ret i32 %call124}125  ; CHECK: call = tail call signext i32 @memcmp126  ; CHECK-BE: call = tail call signext i32 @memcmp127define signext i32 @test4(ptr nocapture readonly %buffer1, ptr nocapture readonly %buffer2)  {128 129entry:130  %call = tail call signext i32 @memcmp(ptr %buffer1, ptr %buffer2, i64 129)131  ret i32 %call132}133 134define signext i32 @test5(ptr nocapture readonly %buffer1, ptr nocapture readonly %buffer2, i32 signext %SIZE)  {135  ; CHECK: call = tail call signext i32 @memcmp136  ; CHECK-BE: call = tail call signext i32 @memcmp137entry:138  %conv = sext i32 %SIZE to i64139  %call = tail call signext i32 @memcmp(ptr %buffer1, ptr %buffer2, i64 %conv)140  ret i32 %call141}142