[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / SystemZ / fpc-intrinsics.ll
blobfd8064b18fcf3c76ae842ca4a2f1c2c51dca84e4
1 ; Test floating-point control register intrinsics.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
5 declare void @llvm.s390.sfpc(i32)
6 declare i32 @llvm.s390.efpc()
8 ; SFPC.
9 define void @test_sfpc(i32 %fpc) {
10 ; CHECK-LABEL: test_sfpc:
11 ; CHECK: sfpc %r2
12 ; CHECK: br %r14
13   call void @llvm.s390.sfpc(i32 %fpc)
14   ret void
17 ; EFPC.
18 define i32 @test_efpc() {
19 ; CHECK-LABEL: test_efpc:
20 ; CHECK: efpc %r2
21 ; CHECK: br %r14
22   %res = call i32 @llvm.s390.efpc()
23   ret i32 %res
26 ; LFPC.
27 define void @test_lfpc1(i32 *%ptr) {
28 ; CHECK-LABEL: test_lfpc1:
29 ; CHECK: lfpc 0(%r2)
30 ; CHECK: br %r14
31   %fpc = load i32, i32 *%ptr
32   call void @llvm.s390.sfpc(i32 %fpc)
33   ret void
36 ; LFPC with offset.
37 define void @test_lfpc2(i32 *%ptr) {
38 ; CHECK-LABEL: test_lfpc2:
39 ; CHECK: lfpc 4092(%r2)
40 ; CHECK: br %r14
41   %ptr1 = getelementptr i32, i32 *%ptr, i32 1023
42   %fpc = load i32, i32 *%ptr1
43   call void @llvm.s390.sfpc(i32 %fpc)
44   ret void
47 ; STFPC.
48 define void @test_stfpc1(i32 *%ptr) {
49 ; CHECK-LABEL: test_stfpc1:
50 ; CHECK: stfpc 0(%r2)
51 ; CHECK: br %r14
52   %fpc = call i32 @llvm.s390.efpc()
53   store i32 %fpc, i32 *%ptr
54   ret void
57 ; STFPC with offset.
58 define void @test_stfpc2(i32 *%ptr) {
59 ; CHECK-LABEL: test_stfpc2:
60 ; CHECK: stfpc 4092(%r2)
61 ; CHECK: br %r14
62   %fpc = call i32 @llvm.s390.efpc()
63   %ptr1 = getelementptr i32, i32 *%ptr, i32 1023
64   store i32 %fpc, i32 *%ptr1
65   ret void