1; Test floating-point control register intrinsics. 2; 3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4 5declare void @llvm.s390.sfpc(i32) 6declare i32 @llvm.s390.efpc() 7 8; SFPC. 9define 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 15} 16 17; EFPC. 18define 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 24} 25 26; LFPC. 27define 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 34} 35 36; LFPC with offset. 37define 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 45} 46 47; STFPC. 48define 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 55} 56 57; STFPC with offset. 58define 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 66} 67 68