68 lines · plain
1; Test floating-point control register intrinsics.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 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 %r212; CHECK: br %r1413 call void @llvm.s390.sfpc(i32 %fpc)14 ret void15}16 17; EFPC.18define i32 @test_efpc() {19; CHECK-LABEL: test_efpc:20; CHECK: efpc %r221; CHECK: br %r1422 %res = call i32 @llvm.s390.efpc()23 ret i32 %res24}25 26; LFPC.27define void @test_lfpc1(ptr %ptr) {28; CHECK-LABEL: test_lfpc1:29; CHECK: lfpc 0(%r2)30; CHECK: br %r1431 %fpc = load i32, ptr %ptr32 call void @llvm.s390.sfpc(i32 %fpc)33 ret void34}35 36; LFPC with offset.37define void @test_lfpc2(ptr %ptr) {38; CHECK-LABEL: test_lfpc2:39; CHECK: lfpc 4092(%r2)40; CHECK: br %r1441 %ptr1 = getelementptr i32, ptr %ptr, i32 102342 %fpc = load i32, ptr %ptr143 call void @llvm.s390.sfpc(i32 %fpc)44 ret void45}46 47; STFPC.48define void @test_stfpc1(ptr %ptr) {49; CHECK-LABEL: test_stfpc1:50; CHECK: stfpc 0(%r2)51; CHECK: br %r1452 %fpc = call i32 @llvm.s390.efpc()53 store i32 %fpc, ptr %ptr54 ret void55}56 57; STFPC with offset.58define void @test_stfpc2(ptr %ptr) {59; CHECK-LABEL: test_stfpc2:60; CHECK: stfpc 4092(%r2)61; CHECK: br %r1462 %fpc = call i32 @llvm.s390.efpc()63 %ptr1 = getelementptr i32, ptr %ptr, i32 102364 store i32 %fpc, ptr %ptr165 ret void66}67 68