File: max.ll

package info (click to toggle)
intel-graphics-compiler2 2.28.4-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 792,744 kB
  • sloc: cpp: 5,761,745; ansic: 466,928; lisp: 312,143; python: 114,790; asm: 44,736; pascal: 10,930; sh: 8,033; perl: 7,914; ml: 3,625; awk: 3,523; yacc: 2,747; javascript: 2,667; lex: 1,898; f90: 1,028; cs: 573; xml: 474; makefile: 344; objc: 162
file content (37 lines) | stat: -rw-r--r-- 1,950 bytes parent folder | download | duplicates (4)
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
;=========================== begin_copyright_notice ============================
;
; Copyright (C) 2024 Intel Corporation
;
; SPDX-License-Identifier: MIT
;
;============================ end_copyright_notice =============================

;RUN: %opt %use_old_pass_manager% -GenXReduceIntSize -march=genx64 -S < %s | FileCheck %s

declare <16 x i8> @some.intrinsic()
declare void @another.intrinsic(<16 x i32>)
declare <16 x i32>  @llvm.smax.v16i32(<16 x i32>, <16 x i32>)
declare <16 x i32>  @llvm.umax.v16i32(<16 x i32>, <16 x i32>)

; CHECK-LABEL: @test_smax(
define dllexport spir_kernel void @test_smax(i32 %0) {
; CHECK: [[REDUCE:[^ ]+]] = sext <16 x i8> %2 to <16 x i16>
; CHECK: [[CALL:[^ ]+]] = call <16 x i16> @llvm.smax.v16i16(<16 x i16> [[REDUCE]], <16 x i16> <i16 -180, i16 -180, i16 -180, i16 -180, i16 -180, i16 -180, i16 -180, i16 -180, i16 -180, i16 -180, i16 -180, i16 -180, i16 -180, i16 -180, i16 -180, i16 -180>)
; CHECK: [[EXT:[^ ]+]] = sext <16 x i16> [[CALL]] to <16 x i32>
  %2 = call <16 x i8> @some.intrinsic()
  %3 = sext <16 x i8> %2 to <16 x i32>
  %4 = call <16 x i32> @llvm.smax.v16i32(<16 x i32> %3, <16 x i32> <i32 -180, i32 -180, i32 -180, i32 -180, i32 -180, i32 -180, i32 -180, i32 -180, i32 -180, i32 -180, i32 -180, i32 -180, i32 -180, i32 -180, i32 -180, i32 -180>)
  call void @another.intrinsic(<16 x i32> %4)
  ret void
}

; CHECK-LABEL: @test_umax
define dllexport spir_kernel void @test_umax(i32 %0) {
; CHECK: [[CALL:[^ ]+]] = call <16 x i8> @llvm.umax.v16i8(<16 x i8> %2, <16 x i8> <i8 -76
; CHECK: [[EXT:[^ ]+]] = zext <16 x i8> [[CALL]] to <16 x i32>
  %2 = call <16 x i8> @some.intrinsic()
  %3 = zext <16 x i8> %2 to <16 x i32>
  %4 = call <16 x i32> @llvm.umax.v16i32(<16 x i32> %3, <16 x i32> <i32 180, i32 180, i32 180, i32 180, i32 180, i32 180, i32 180, i32 180, i32 180, i32 180, i32 180, i32 180, i32 180, i32 180, i32 180, i32 180>)
  call void @another.intrinsic(<16 x i32> %4)
  ret void
}