diff options
Diffstat (limited to 'llvm/test/CodeGen/SystemZ/fpc-intrinsics.ll')
| -rw-r--r-- | llvm/test/CodeGen/SystemZ/fpc-intrinsics.ll | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/SystemZ/fpc-intrinsics.ll b/llvm/test/CodeGen/SystemZ/fpc-intrinsics.ll new file mode 100644 index 00000000000..fd8064b18fc --- /dev/null +++ b/llvm/test/CodeGen/SystemZ/fpc-intrinsics.ll @@ -0,0 +1,67 @@ +; Test floating-point control register intrinsics. +; +; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s + +declare void @llvm.s390.sfpc(i32) +declare i32 @llvm.s390.efpc() + +; SFPC. +define void @test_sfpc(i32 %fpc) { +; CHECK-LABEL: test_sfpc: +; CHECK: sfpc %r2 +; CHECK: br %r14 + call void @llvm.s390.sfpc(i32 %fpc) + ret void +} + +; EFPC. +define i32 @test_efpc() { +; CHECK-LABEL: test_efpc: +; CHECK: efpc %r2 +; CHECK: br %r14 + %res = call i32 @llvm.s390.efpc() + ret i32 %res +} + +; LFPC. +define void @test_lfpc1(i32 *%ptr) { +; CHECK-LABEL: test_lfpc1: +; CHECK: lfpc 0(%r2) +; CHECK: br %r14 + %fpc = load i32, i32 *%ptr + call void @llvm.s390.sfpc(i32 %fpc) + ret void +} + +; LFPC with offset. +define void @test_lfpc2(i32 *%ptr) { +; CHECK-LABEL: test_lfpc2: +; CHECK: lfpc 4092(%r2) +; CHECK: br %r14 + %ptr1 = getelementptr i32, i32 *%ptr, i32 1023 + %fpc = load i32, i32 *%ptr1 + call void @llvm.s390.sfpc(i32 %fpc) + ret void +} + +; STFPC. +define void @test_stfpc1(i32 *%ptr) { +; CHECK-LABEL: test_stfpc1: +; CHECK: stfpc 0(%r2) +; CHECK: br %r14 + %fpc = call i32 @llvm.s390.efpc() + store i32 %fpc, i32 *%ptr + ret void +} + +; STFPC with offset. +define void @test_stfpc2(i32 *%ptr) { +; CHECK-LABEL: test_stfpc2: +; CHECK: stfpc 4092(%r2) +; CHECK: br %r14 + %fpc = call i32 @llvm.s390.efpc() + %ptr1 = getelementptr i32, i32 *%ptr, i32 1023 + store i32 %fpc, i32 *%ptr1 + ret void +} + |

