aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/Transforms/InstSimplify/disable_folding.ll
blob: 66adf6af1e97f333ec5d9813b84f41457bbd9df7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt < %s -passes=instsimplify -march=nvptx64 --mcpu=sm_86 --mattr=+ptx72 -S | FileCheck %s --check-prefixes CHECK,FOLDING_ENABLED
; RUN: opt < %s -disable-fp-call-folding -passes=instsimplify -march=nvptx64 --mcpu=sm_86 --mattr=+ptx72 -S | FileCheck %s --check-prefixes CHECK,FOLDING_DISABLED

; Check that we can disable folding of intrinsic calls via both the -disable-fp-call-folding flag and the strictfp attribute.

; Should be folded by default unless -disable-fp-call-folding is set
define float @test_fmax_ftz_nan_xorsign_abs_f() {
; FOLDING_ENABLED-LABEL: define float @test_fmax_ftz_nan_xorsign_abs_f() {
; FOLDING_ENABLED-NEXT:    ret float -2.000000e+00
;
; FOLDING_DISABLED-LABEL: define float @test_fmax_ftz_nan_xorsign_abs_f() {
; FOLDING_DISABLED-NEXT:    [[RES:%.*]] = call float @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f(float 1.250000e+00, float -2.000000e+00)
; FOLDING_DISABLED-NEXT:    ret float [[RES]]
;
  %res = call float @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f(float 1.25, float -2.0)
  ret float %res
}

; Check that -disable-fp-call-folding triggers for LLVM instrincis, not just NVPTX target-specific ones.
define float @test_llvm_sin() {
; FOLDING_ENABLED-LABEL: define float @test_llvm_sin() {
; FOLDING_ENABLED-NEXT:    ret float 0x3FDEAEE880000000
;
; FOLDING_DISABLED-LABEL: define float @test_llvm_sin() {
; FOLDING_DISABLED-NEXT:    [[RES:%.*]] = call float @llvm.sin.f32(float 5.000000e-01)
; FOLDING_DISABLED-NEXT:    ret float [[RES]]
;
  %res = call float @llvm.sin.f32(float 0.5)
  ret float %res
}

; Should not be folded, even when -disable-fp-call-folding is not set, as it is marked as strictfp.
define float @test_fmax_ftz_nan_f_strictfp() {
; CHECK-LABEL: define float @test_fmax_ftz_nan_f_strictfp() {
; CHECK-NEXT:    [[RES:%.*]] = call float @llvm.nvvm.fmax.ftz.nan.f(float 1.250000e+00, float -2.000000e+00) #[[ATTR1:[0-9]+]]
; CHECK-NEXT:    ret float [[RES]]
;
  %res = call float @llvm.nvvm.fmax.ftz.nan.f(float 1.25, float -2.0) #1
  ret float %res
}

; Check that strictfp disables folding for LLVM math intrinsics like sin.f32
; even when -disable-fp-call-folding is not set.
define float @test_llvm_sin_strictfp() {
; CHECK-LABEL: define float @test_llvm_sin_strictfp() {
; CHECK-NEXT:    [[RES:%.*]] = call float @llvm.sin.f32(float 5.000000e-01) #[[ATTR1]]
; CHECK-NEXT:    ret float [[RES]]
;
  %res = call float @llvm.sin.f32(float 0.5) #1
  ret float %res
}

attributes #1 = { strictfp }