File: frem.ll

package info (click to toggle)
intel-graphics-compiler2 2.22.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 107,676 kB
  • sloc: cpp: 809,645; lisp: 288,070; ansic: 16,397; python: 4,010; yacc: 2,588; lex: 1,666; pascal: 314; sh: 186; makefile: 38
file content (61 lines) | stat: -rw-r--r-- 2,301 bytes parent folder | download
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
;=========================== begin_copyright_notice ============================
;
; Copyright (C) 2024-2025 Intel Corporation
;
; SPDX-License-Identifier: MIT
;
;============================ end_copyright_notice =============================

; RUN: %opt %use_old_pass_manager% -GenXBuiltinFunctions -march=genx64 -mtriple=spir64-unknown-unknown \
; RUN: -mcpu=XeLPG -vc-builtins-bif-path=%VC_BIF_XeLPG% -S %s 2>&1 | FileCheck %s

; RUN: %opt %use_old_pass_manager% -GenXBuiltinFunctions -march=genx64 -mtriple=spir64-unknown-unknown \
; RUN: -mcpu=XeHPC -vc-builtins-bif-path=%VC_BIF_XeHPC% -S %s 2>&1 | FileCheck %s --check-prefix=CHECK-FDIV

; CHECK-NOT: WARNING

; CHECK-LABEL: @test_scalar_double
define dllexport spir_kernel void @test_scalar_double(double %a, double %b) {
  %result = frem double %a, %b
; CHECK-NOT: frem double
; CHECK-FDIV-NOT: frem double
  ret void
}

; CHECK-LABEL: @test_scalar_float
define dllexport spir_kernel void @test_scalar_float(float %a, float %b) {
  %result = frem float %a, %b
; CHECK-NOT: frem float
; CHECK-FDIV-NOT: frem float
  ret void
}

; CHECK-LABEL: @test_V4_double
define dllexport spir_kernel void @test_V4_double(<4 x double> %a, <4 x double> %b) {
  %result = frem <4 x double> %a, %b
; CHECK-NOT: frem <4 x double>
; CHECK-FDIV-NOT: frem <4 x double>
  ret void
}

; CHECK-LABEL: @test_V4_float
define dllexport spir_kernel void @test_V4_float(<4 x float> %a, <4 x float> %b) {
  %result = frem <4 x float> %a, %b
; CHECK-NOT: frem <4 x float>
; CHECK-FDIV-NOT: frem <4 x float>
  ret void
}

; If frem implemented - not expected genx intrinsics:
; CHECK-NOT: call {{.*}} @llvm.genx.ieee.div

; CHECK-FDIV: define internal spir_func double @{{.*}}__vc_builtin_frem_f64__rte_{{.*}}#[[REF_SC:[0-9]+]] {
; CHECK-FDIV: tail call <1 x double> @llvm.genx.ieee.div

; CHECK-FDIV: define internal spir_func <4 x double> @{{.*}}__vc_builtin_frem_v4f64__rte_{{.*}}#[[REF_V:[0-9]+]] {
; CHECK-FDIV: tail call <4 x double> @llvm.genx.ieee.div.v4f64

; Float-control mask = 0x4c0 = RTNE | DoublePrecisionDenorm | SinglePrecisionDenorm | HalfPrecisionDenorm =
; 0 << 4 | 1 << 6 | 1 << 7 | 1 << 10
; CHECK-FDIV-DAG: attributes #[[REF_SC]] = {{.*}} "CMFloatControl"="1216" {{.*}}
; CHECK-FDIV-DAG: attributes #[[REF_V]] = {{.*}} "CMFloatControl"="1216" {{.*}}