File: cast.ll

package info (click to toggle)
intel-graphics-compiler 1.0.17791.18-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 102,312 kB
  • sloc: cpp: 935,343; lisp: 286,143; ansic: 16,196; python: 3,279; yacc: 2,487; lex: 1,642; pascal: 300; sh: 174; makefile: 27
file content (132 lines) | stat: -rw-r--r-- 4,323 bytes parent folder | download | duplicates (2)
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
;=========================== begin_copyright_notice ============================
;
; Copyright (C) 2023 Intel Corporation
;
; SPDX-License-Identifier: MIT
;
;============================ end_copyright_notice =============================

; REQUIRES: llvm_12_or_greater
; RUN: %opt %use_old_pass_manager% -GenXBFloatLowering -march=genx64 -mcpu=XeHPG -mtriple=spir64-unknown-unknown -S < %s | FileCheck %s

; CHECK-LABEL: @scalar_trunc
define bfloat @scalar_trunc(double %a) {
  ; CHECK: [[CAST:%[^ ]+]] = fptrunc double %a to float
  ; CHECK: [[TRUNC:%[^ ]+]] = fptrunc float [[CAST]] to bfloat
  ; CHECK: ret bfloat [[TRUNC]]
  %res = fptrunc double %a to bfloat
  ret bfloat %res
}

; CHECK-LABEL: @scalar_ext
define double @scalar_ext(bfloat %a) {
  ; CHECK: [[EXT:%[^ ]+]] = fpext bfloat %a to float
  ; CHECK: [[CAST:%[^ ]+]] = fpext float [[EXT]] to double
  ; CHECK: ret double [[CAST]]
  %res = fpext bfloat %a to double
  ret double %res
}

; CHECK-LABEL: @scalar_trunc_float
define bfloat @scalar_trunc_float(float %a) {
  ; CHECK: %res = fptrunc float %a to bfloat
  %res = fptrunc float %a to bfloat
  ret bfloat %res
}

; CHECK-LABEL: @scalar_ext_float
define float @scalar_ext_float(bfloat %a) {
  ; CHECK: %res = fpext bfloat %a to float
  %res = fpext bfloat %a to float
  ret float %res
}

; CHECK-LABEL: @scalar_sitofp
define bfloat @scalar_sitofp(i32 %a) {
  ; CHECK: [[CAST:%[^ ]+]] = sitofp i32 %a to float
  ; CHECK: [[TRUNC:%[^ ]+]] = fptrunc float [[CAST]] to bfloat
  ; CHECK: ret bfloat [[TRUNC]]
  %res = sitofp i32 %a to bfloat
  ret bfloat %res
}

; CHECK-LABEL: @scalar_uitofp
define bfloat @scalar_uitofp(i32 %a) {
  ; CHECK: [[CAST:%[^ ]+]] = uitofp i32 %a to float
  ; CHECK: [[TRUNC:%[^ ]+]] = fptrunc float [[CAST]] to bfloat
  ; CHECK: ret bfloat [[TRUNC]]
  %res = uitofp i32 %a to bfloat
  ret bfloat %res
}

; CHECK-LABEL: @scalar_fptosi
define i32 @scalar_fptosi(bfloat %a) {
  ; CHECK: [[EXT:%[^ ]+]] = fpext bfloat %a to float
  ; CHECK: [[CAST:%[^ ]+]] = fptosi float [[EXT]] to i32
  ; CHECK: ret i32 [[CAST]]
  %res = fptosi bfloat %a to i32
  ret i32 %res
}

; CHECK-LABEL: @scalar_fptoui
define i32 @scalar_fptoui(bfloat %a) {
  ; CHECK: [[EXT:%[^ ]+]] = fpext bfloat %a to float
  ; CHECK: [[CAST:%[^ ]+]] = fptoui float [[EXT]] to i32
  ; CHECK: ret i32 [[CAST]]
  %res = fptoui bfloat %a to i32
  ret i32 %res
}

; CHECK-LABEL: @vector_trunc
define <2 x bfloat> @vector_trunc(<2 x double> %a) {
  ; CHECK: [[CAST:%[^ ]+]] = fptrunc <2 x double> %a to <2 x float>
  ; CHECK: [[TRUNC:%[^ ]+]] = fptrunc <2 x float> [[CAST]] to <2 x bfloat>
  ; CHECK: ret <2 x bfloat> [[TRUNC]]
  %res = fptrunc <2 x double> %a to <2 x bfloat>
  ret <2 x bfloat> %res
}

; CHECK-LABEL: @vector_ext
define <2 x double> @vector_ext(<2 x bfloat> %a) {
  ; CHECK: [[EXT:%[^ ]+]] = fpext <2 x bfloat> %a to <2 x float>
  ; CHECK: [[CAST:%[^ ]+]] = fpext <2 x float> [[EXT]] to <2 x double>
  ; CHECK: ret <2 x double> [[CAST]]
  %res = fpext <2 x bfloat> %a to <2 x double>
  ret <2 x double> %res
}

; CHECK-LABEL: @vector_sitofp
define <2 x bfloat> @vector_sitofp(<2 x i32> %a) {
  ; CHECK: [[CAST:%[^ ]+]] = sitofp <2 x i32> %a to <2 x float>
  ; CHECK: [[TRUNC:%[^ ]+]] = fptrunc <2 x float> [[CAST]] to <2 x bfloat>
  ; CHECK: ret <2 x bfloat> [[TRUNC]]
  %res = sitofp <2 x i32> %a to <2 x bfloat>
  ret <2 x bfloat> %res
}

; CHECK-LABEL: @vector_uitofp
define <2 x bfloat> @vector_uitofp(<2 x i32> %a) {
  ; CHECK: [[CAST:%[^ ]+]] = uitofp <2 x i32> %a to <2 x float>
  ; CHECK: [[TRUNC:%[^ ]+]] = fptrunc <2 x float> [[CAST]] to <2 x bfloat>
  ; CHECK: ret <2 x bfloat> [[TRUNC]]
  %res = uitofp <2 x i32> %a to <2 x bfloat>
  ret <2 x bfloat> %res
}

; CHECK-LABEL: @vector_fptosi
define <2 x i32> @vector_fptosi(<2 x bfloat> %a) {
  ; CHECK: [[EXT:%[^ ]+]] = fpext <2 x bfloat> %a to <2 x float>
  ; CHECK: [[CAST:%[^ ]+]] = fptosi <2 x float> [[EXT]] to <2 x i32>
  ; CHECK: ret <2 x i32> [[CAST]]
  %res = fptosi <2 x bfloat> %a to <2 x i32>
  ret <2 x i32> %res
}

; CHECK-LABEL: @vector_fptoui
define <2 x i32> @vector_fptoui(<2 x bfloat> %a) {
  ; CHECK: [[EXT:%[^ ]+]] = fpext <2 x bfloat> %a to <2 x float>
  ; CHECK: [[CAST:%[^ ]+]] = fptoui <2 x float> [[EXT]] to <2 x i32>
  ; CHECK: ret <2 x i32> [[CAST]]
  %res = fptoui <2 x bfloat> %a to <2 x i32>
  ret <2 x i32> %res
}