| ; 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)"} |