Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PowerPC][NFC] Add a mulld testcase for scheduling check.
This patch add a mulld testcase for scheduling check. Patch By: jsji (Jinsong Ji) Differential Revision: https://reviews.llvm.org/D52039 llvm-svn: 342440
- Loading branch information
QingShan Zhang
committed
Sep 18, 2018
1 parent
9d49c44
commit df1a2d8
Showing
1 changed file
with
53 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
; RUN: llc -verify-machineinstrs -mcpu=pwr9 -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s | ||
; RUN: llc -verify-machineinstrs -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s | ||
; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s \ | ||
; RUN: --check-prefix=CHECK-ITIN | ||
; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s \ | ||
; RUN: --check-prefix=CHECK-ITIN | ||
; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s \ | ||
; RUN: --check-prefix=CHECK-ITIN | ||
|
||
define void @bn_mul_comba8(i64* nocapture %r, i64* nocapture readonly %a, i64* nocapture readonly %b) { | ||
; CHECK-LABEL: bn_mul_comba8: | ||
; CHECK: mulhdu | ||
; CHECK-NEXT: mulld | ||
; CHECK-NEXT: mulhdu | ||
; CHECK-NEXT: mulld | ||
; CHECK-NEXT: mulhdu | ||
|
||
|
||
; CHECK-ITIN-LABEL: bn_mul_comba8: | ||
; CHECK-ITIN: mulhdu | ||
; CHECK-ITIN-NEXT: mulhdu | ||
; CHECK-ITIN-NEXT: mulld | ||
; CHECK-ITIN-NEXT: mulhdu | ||
; CHECK-ITIN-NEXT: mulld | ||
|
||
%1 = load i64, i64* %a, align 8 | ||
%conv = zext i64 %1 to i128 | ||
%2 = load i64, i64* %b, align 8 | ||
%conv2 = zext i64 %2 to i128 | ||
%mul = mul nuw i128 %conv2, %conv | ||
%shr = lshr i128 %mul, 64 | ||
%agep = getelementptr inbounds i64, i64* %a, i64 1 | ||
%3 = load i64, i64* %agep, align 8 | ||
%conv14 = zext i64 %3 to i128 | ||
%mul15 = mul nuw i128 %conv14, %conv | ||
%add17 = add i128 %mul15, %shr | ||
%shr19 = lshr i128 %add17, 64 | ||
%conv20 = trunc i128 %shr19 to i64 | ||
%bgep = getelementptr inbounds i64, i64* %b, i64 1 | ||
%4 = load i64, i64* %bgep, align 8 | ||
%conv28 = zext i64 %4 to i128 | ||
%mul31 = mul nuw i128 %conv28, %conv2 | ||
%conv32 = and i128 %add17, 18446744073709551615 | ||
%add33 = add i128 %conv32, %mul31 | ||
%shr35 = lshr i128 %add33, 64 | ||
%conv36 = trunc i128 %shr35 to i64 | ||
%add37 = add i64 %conv36, %conv20 | ||
%cmp38 = icmp ult i64 %add37, %conv36 | ||
%conv148 = zext i1 %cmp38 to i64 | ||
store i64 %conv148, i64* %r, align 8 | ||
ret void | ||
} | ||
|