File: basic-typed-pointers.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 (105 lines) | stat: -rw-r--r-- 3,971 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
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
;=========================== begin_copyright_notice ============================
;
; Copyright (C) 2022-2024 Intel Corporation
;
; SPDX-License-Identifier: MIT
;
;============================ end_copyright_notice =============================

; RUN: igc_opt -igc-freeze-int-div-pass -S %s | FileCheck %s --check-prefixes=CHECK,%LLVM_DEPENDENT_CHECK_PREFIX%
; ------------------------------------------------
; FreezeIntDiv
; ------------------------------------------------

; CHECK-LABEL: @div_by_zero
define void @div_by_zero(i32 %idx) #0 {
entry:
  %0 = udiv i32 %idx, 0
  call void @foo(i32 %0)
  ; CHECK-PRE-LLVM-14: [[RESULT_UDIV:%[a-zA-Z0-9_.%-]+]] = udiv i32 %idx, 0
  ; CHECK-LLVM-14-PLUS: [[VALUE_UDIV:%[a-zA-Z0-9_.%-]+]] = udiv i32 %idx, 0
  ; CHECK-LLVM-14-PLUS: [[RESULT_UDIV:%[a-zA-Z0-9_.%-]+]] = freeze i32 [[VALUE_UDIV]]
  ; CHECK-NEXT: call void @foo(i32 [[RESULT_UDIV]])

  %1 = urem i32 %idx, 0
  call void @foo(i32 %1)
  ; CHECK-PRE-LLVM-14: [[RESULT_UREM:%[a-zA-Z0-9_.%-]+]] = urem i32 %idx, 0
  ; CHECK-LLVM-14-PLUS: [[VALUE_UREM:%[a-zA-Z0-9_.%-]+]] = urem i32 %idx, 0
  ; CHECK-LLVM-14-PLUS: [[RESULT_UREM:%[a-zA-Z0-9_.%-]+]] = freeze i32 [[VALUE_UREM]]
  ; CHECK-NEXT: call void @foo(i32 [[RESULT_UREM]])

  %2 = sdiv i32 %idx, 0
  call void @foo(i32 %2)
  ; CHECK-PRE-LLVM-14: [[RESULT_SDIV:%[a-zA-Z0-9_.%-]+]] = sdiv i32 %idx, 0
  ; CHECK-LLVM-14-PLUS: [[VALUE_SDIV:%[a-zA-Z0-9_.%-]+]] = sdiv i32 %idx, 0
  ; CHECK-LLVM-14-PLUS: [[RESULT_SDIV:%[a-zA-Z0-9_.%-]+]] = freeze i32 [[VALUE_SDIV]]
  ; CHECK-NEXT: call void @foo(i32 [[RESULT_SDIV]])

  %3 = srem i32 %idx, 0
  call void @foo(i32 %3)
  ; CHECK-PRE-LLVM-14: [[RESULT_SREM:%[a-zA-Z0-9_.%-]+]] = srem i32 %idx, 0
  ; CHECK-LLVM-14-PLUS: [[VALUE_SREM:%[a-zA-Z0-9_.%-]+]] = srem i32 %idx, 0
  ; CHECK-LLVM-14-PLUS: [[RESULT_SREM:%[a-zA-Z0-9_.%-]+]] = freeze i32 [[VALUE_SREM]]
  ; CHECK-NEXT: call void @foo(i32 [[RESULT_SREM]])

  ret void
}

; CHECK-LABEL: @div_by_non_const
define void @div_by_non_const(i32 %idx, i32 %div_arg) #0 {
entry:
  %0 = udiv i32 %idx, %div_arg
  call void @foo(i32 %0)
  ; CHECK-PRE-LLVM-14: [[RESULT_UDIV:%[a-zA-Z0-9_.%-]+]] = udiv i32 %idx, %div_arg
  ; CHECK-LLVM-14-PLUS: [[VALUE_UDIV:%[a-zA-Z0-9_.%-]+]] = udiv i32 %idx, %div_arg
  ; CHECK-LLVM-14-PLUS: [[RESULT_UDIV:%[a-zA-Z0-9_.%-]+]] = freeze i32 [[VALUE_UDIV]]
  ; CHECK-NEXT: call void @foo(i32 [[RESULT_UDIV]])

  %1 = urem i32 %idx, %div_arg
  call void @foo(i32 %1)
  ; CHECK-PRE-LLVM-14: [[RESULT_UREM:%[a-zA-Z0-9_.%-]+]] = urem i32 %idx, %div_arg
  ; CHECK-LLVM-14-PLUS: [[VALUE_UREM:%[a-zA-Z0-9_.%-]+]] = urem i32 %idx, %div_arg
  ; CHECK-LLVM-14-PLUS: [[RESULT_UREM:%[a-zA-Z0-9_.%-]+]] = freeze i32 [[VALUE_UREM]]
  ; CHECK-NEXT: call void @foo(i32 [[RESULT_UREM]])

  %2 = sdiv i32 %idx, %div_arg
  call void @foo(i32 %2)
  ; CHECK-PRE-LLVM-14: [[RESULT_SDIV:%[a-zA-Z0-9_.%-]+]] = sdiv i32 %idx, %div_arg
  ; CHECK-LLVM-14-PLUS: [[VALUE_SDIV:%[a-zA-Z0-9_.%-]+]] = sdiv i32 %idx, %div_arg
  ; CHECK-LLVM-14-PLUS: [[RESULT_SDIV:%[a-zA-Z0-9_.%-]+]] = freeze i32 [[VALUE_SDIV]]
  ; CHECK-NEXT: call void @foo(i32 [[RESULT_SDIV]])

  %3 = srem i32 %idx, %div_arg
  call void @foo(i32 %3)
  ; CHECK-PRE-LLVM-14: [[RESULT_SREM:%[a-zA-Z0-9_.%-]+]] = srem i32 %idx, %div_arg
  ; CHECK-LLVM-14-PLUS: [[VALUE_SREM:%[a-zA-Z0-9_.%-]+]] = srem i32 %idx, %div_arg
  ; CHECK-LLVM-14-PLUS: [[RESULT_SREM:%[a-zA-Z0-9_.%-]+]] = freeze i32 [[VALUE_SREM]]
  ; CHECK-NEXT: call void @foo(i32 [[RESULT_SREM]])

  ret void
}

; CHECK-LABEL: @div_by_const_non_zero
define void @div_by_const_non_zero(i32 %idx) #0 {
entry:
  ; CHECK-NOT: freeze
  %0 = udiv i32 %idx, 1
  call void @foo(i32 %0)

  %1 = urem i32 %idx, 2
  call void @foo(i32 %1)

  %2 = sdiv i32 %idx, 3
  call void @foo(i32 %2)

  %3 = srem i32 %idx, 4
  call void @foo(i32 %3)

  ret void
}

; Function Attrs: noduplicate nounwind
declare void @foo(i32) #1

attributes #0 = { "null-pointer-is-valid"="true" }
attributes #1 = { noduplicate nounwind }