File: scalarize-alloca.ll

package info (click to toggle)
llvm-toolchain-21 1%3A21.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,235,796 kB
  • sloc: cpp: 7,617,614; ansic: 1,433,901; asm: 1,058,726; python: 252,096; f90: 94,671; objc: 70,753; lisp: 42,813; pascal: 18,401; sh: 10,032; ml: 5,111; perl: 4,720; awk: 3,523; makefile: 3,401; javascript: 2,272; xml: 892; fortran: 770
file content (44 lines) | stat: -rw-r--r-- 1,735 bytes parent folder | download | duplicates (3)
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
; RUN: opt -S -passes='dxil-data-scalarization' -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s --check-prefixes=SCHECK,CHECK
; RUN: opt -S -passes='dxil-data-scalarization,dxil-flatten-arrays' -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s --check-prefixes=FCHECK,CHECK

; CHECK-LABEL: alloca_2d__vec_test
define void @alloca_2d__vec_test() {
  ; SCHECK:  alloca [2 x [4 x i32]], align 16
  ; FCHECK:  alloca [8 x i32], align 16
  ; CHECK: ret void
  %1 = alloca [2 x <4 x i32>], align 16
  ret void
}

; CHECK-LABEL: alloca_4d__vec_test
define void @alloca_4d__vec_test() {
  ; SCHECK:  alloca [2 x [2 x [2 x [2 x i32]]]], align 16
  ; FCHECK:  alloca [16 x i32], align 16
  ; CHECK: ret void
  %1 = alloca [2 x [2 x [2 x <2 x i32>]]], align 16
  ret void
}

; CHECK-LABEL: alloca_vec_test
define void @alloca_vec_test() {
  ; CHECK:  alloca [4 x i32], align 16
  ; CHECK: ret void
  %1 = alloca <4 x i32>, align 16
  ret void
}

; CHECK-LABEL: alloca_2d_gep_test
define void @alloca_2d_gep_test() {
  ; SCHECK:  [[alloca_val:%.*]] = alloca [2 x [2 x i32]], align 16
  ; FCHECK:  [[alloca_val:%.*]] = alloca [4 x i32], align 16
  ; CHECK: [[tid:%.*]] = tail call i32 @llvm.dx.thread.id(i32 0)
  ; SCHECK: [[gep:%.*]] = getelementptr inbounds nuw [2 x [2 x i32]], ptr [[alloca_val]], i32 0, i32 [[tid]]
  ; FCHECK: [[flatidx_mul:%.*]] = mul i32 [[tid]], 2
  ; FCHECK: [[flatidx:%.*]] = add i32 0, [[flatidx_mul]]
  ; FCHECK: [[gep:%.*]] = getelementptr inbounds nuw [4 x i32], ptr [[alloca_val]], i32 0, i32 [[flatidx]]
  ; CHECK: ret void
  %1 = alloca [2 x <2 x i32>], align 16
  %2 = tail call i32 @llvm.dx.thread.id(i32 0)
  %3 = getelementptr inbounds nuw [2 x <2 x i32>], ptr %1, i32 0, i32 %2
  ret void
}