131 lines
3.5 KiB
LLVM
131 lines
3.5 KiB
LLVM
; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s
|
|
|
|
;;; Test intrinsics for communication register
|
|
;;;
|
|
;;; Note:
|
|
;;; We test LCR, SCR, TSCR, and FIDCR instructions.
|
|
|
|
; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn
|
|
define i64 @lcr_sss(i64 noundef %0, i64 noundef %1) {
|
|
; CHECK-LABEL: lcr_sss:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: lcr %s0, %s0, %s1
|
|
; CHECK-NEXT: b.l.t (, %s10)
|
|
%3 = tail call i64 @llvm.ve.vl.lcr.sss(i64 %0, i64 %1)
|
|
ret i64 %3
|
|
}
|
|
|
|
; Function Attrs: nofree nosync nounwind readnone
|
|
declare i64 @llvm.ve.vl.lcr.sss(i64, i64)
|
|
|
|
; Function Attrs: nounwind
|
|
define void @scr_sss(i64 noundef %0, i64 noundef %1, i64 noundef %2) {
|
|
; CHECK-LABEL: scr_sss:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: scr %s0, %s1, %s2
|
|
; CHECK-NEXT: b.l.t (, %s10)
|
|
tail call void @llvm.ve.vl.scr.sss(i64 %0, i64 %1, i64 %2)
|
|
ret void
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
declare void @llvm.ve.vl.scr.sss(i64, i64, i64)
|
|
|
|
; Function Attrs: nounwind
|
|
define i64 @tscr_ssss(i64 noundef %0, i64 noundef %1, i64 noundef %2) {
|
|
; CHECK-LABEL: tscr_ssss:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: tscr %s0, %s1, %s2
|
|
; CHECK-NEXT: b.l.t (, %s10)
|
|
%4 = tail call i64 @llvm.ve.vl.tscr.ssss(i64 %0, i64 %1, i64 %2)
|
|
ret i64 %4
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
declare i64 @llvm.ve.vl.tscr.ssss(i64, i64, i64)
|
|
|
|
; Function Attrs: nounwind
|
|
define i64 @fidcr_ss0(i64 noundef %0) {
|
|
; CHECK-LABEL: fidcr_ss0:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: fidcr %s0, %s0, 0
|
|
; CHECK-NEXT: b.l.t (, %s10)
|
|
%2 = tail call i64 @llvm.ve.vl.fidcr.sss(i64 %0, i32 0)
|
|
ret i64 %2
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
declare i64 @llvm.ve.vl.fidcr.sss(i64, i32)
|
|
|
|
; Function Attrs: nounwind
|
|
define i64 @fidcr_ss1(i64 noundef %0) {
|
|
; CHECK-LABEL: fidcr_ss1:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: fidcr %s0, %s0, 1
|
|
; CHECK-NEXT: b.l.t (, %s10)
|
|
%2 = tail call i64 @llvm.ve.vl.fidcr.sss(i64 %0, i32 1)
|
|
ret i64 %2
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define i64 @fidcr_ss2(i64 noundef %0) {
|
|
; CHECK-LABEL: fidcr_ss2:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: fidcr %s0, %s0, 2
|
|
; CHECK-NEXT: b.l.t (, %s10)
|
|
%2 = tail call i64 @llvm.ve.vl.fidcr.sss(i64 %0, i32 2)
|
|
ret i64 %2
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define i64 @fidcr_ss3(i64 noundef %0) {
|
|
; CHECK-LABEL: fidcr_ss3:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: fidcr %s0, %s0, 3
|
|
; CHECK-NEXT: b.l.t (, %s10)
|
|
%2 = tail call i64 @llvm.ve.vl.fidcr.sss(i64 %0, i32 3)
|
|
ret i64 %2
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define i64 @fidcr_ss4(i64 noundef %0) {
|
|
; CHECK-LABEL: fidcr_ss4:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: fidcr %s0, %s0, 4
|
|
; CHECK-NEXT: b.l.t (, %s10)
|
|
%2 = tail call i64 @llvm.ve.vl.fidcr.sss(i64 %0, i32 4)
|
|
ret i64 %2
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define i64 @fidcr_ss5(i64 noundef %0) {
|
|
; CHECK-LABEL: fidcr_ss5:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: fidcr %s0, %s0, 5
|
|
; CHECK-NEXT: b.l.t (, %s10)
|
|
%2 = tail call i64 @llvm.ve.vl.fidcr.sss(i64 %0, i32 5)
|
|
ret i64 %2
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define i64 @fidcr_ss6(i64 noundef %0) {
|
|
; CHECK-LABEL: fidcr_ss6:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: fidcr %s0, %s0, 6
|
|
; CHECK-NEXT: b.l.t (, %s10)
|
|
%2 = tail call i64 @llvm.ve.vl.fidcr.sss(i64 %0, i32 6)
|
|
ret i64 %2
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define i64 @fidcr_ss7(i64 noundef %0) {
|
|
; CHECK-LABEL: fidcr_ss7:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: fidcr %s0, %s0, 7
|
|
; CHECK-NEXT: b.l.t (, %s10)
|
|
%2 = tail call i64 @llvm.ve.vl.fidcr.sss(i64 %0, i32 7)
|
|
ret i64 %2
|
|
}
|
|
|
|
!2 = !{!"clang version 15.0.0 (git@kaz7.github.com:sx-aurora-dev/llvm-project.git e0c5640dba6e9ba1cd29ed8d59b85c6378e48ac7)"}
|