blob: bea56d39d9faeffad8b3a84f39b97092ab6823c7 [file] [edit]
; RUN: split-file %s %t
; RUN: opt -disable-output -passes='print<dxil-signature>' %t/min.ll 2>&1 | FileCheck %s --check-prefix=MIN
; RUN: opt -disable-output -passes='print<dxil-signature>' %t/native.ll 2>&1 | FileCheck %s --check-prefix=NATIVE
; RUN: llc -filetype=obj %t/min.ll -o - | obj2yaml | FileCheck %s --check-prefix=MIN-PARTS
; RUN: llc -filetype=obj %t/native.ll -o - | obj2yaml | FileCheck %s --check-prefix=NATIVE-PARTS
; RUN: cat %t/system.ll %t/signed.ll %t/native-mode.ll > %t/signed-system.ll
; RUN: cat %t/system.ll %t/unsigned.ll %t/native-mode.ll > %t/unsigned-system.ll
; RUN: cat %t/system.ll %t/unsigned.ll %t/min-mode.ll > %t/min-system.ll
; RUN: llc -filetype=obj %t/signed-system.ll -o - | obj2yaml | FileCheck %s --check-prefixes=SYSTEM,SIGNED,NATIVE-SYSTEM
; RUN: llc -filetype=obj %t/unsigned-system.ll -o - | obj2yaml | FileCheck %s --check-prefixes=SYSTEM,UNSIGNED,NATIVE-SYSTEM
; RUN: llc -filetype=obj %t/min-system.ll -o - | obj2yaml | FileCheck %s --check-prefixes=SYSTEM,UNSIGNED,MIN-SYSTEM
; The frontend-provided layouts share a row in min-precision mode and use
; separate rows in native 16-bit mode. The 16-bit elements are unused: flags
; must still describe the signature.
; MIN: Outputs: 2 elements, 1 vectors
; MIN-NEXT: 0: A rows=1 cols=1 at 0:0 usage=0 dynamic=0
; MIN-NEXT: 1: B rows=1 cols=1 at 0:1 usage=0 dynamic=0
; NATIVE: Outputs: 2 elements, 2 vectors
; NATIVE-NEXT: 0: A rows=1 cols=1 at 0:0 usage=0 dynamic=0
; NATIVE-NEXT: 1: B rows=1 cols=1 at 1:0 usage=0 dynamic=0
; MIN-PARTS: MinimumPrecision: true
; MIN-PARTS: Name: A
; MIN-PARTS: CompType: Float16
; MIN-PARTS-NEXT: Register: 0
; MIN-PARTS-NEXT: Mask: 1
; MIN-PARTS-NEXT: ExclusiveMask: 15
; MIN-PARTS-NEXT: MinPrecision: Float16
; MIN-PARTS: Name: B
; MIN-PARTS: CompType: Float32
; MIN-PARTS-NEXT: Register: 0
; MIN-PARTS-NEXT: Mask: 2
; MIN-PARTS: SigOutputVectors: [ 1, 0, 0, 0 ]
; NATIVE-PARTS: NativeLowPrecision: true
; NATIVE-PARTS: Name: A
; NATIVE-PARTS: CompType: Float16
; NATIVE-PARTS-NEXT: Register: 0
; NATIVE-PARTS-NEXT: Mask: 1
; NATIVE-PARTS-NEXT: ExclusiveMask: 15
; NATIVE-PARTS-NEXT: MinPrecision: Default
; NATIVE-PARTS: Name: B
; NATIVE-PARTS: CompType: Float32
; NATIVE-PARTS-NEXT: Register: 1
; NATIVE-PARTS-NEXT: Mask: 1
; NATIVE-PARTS: SigOutputVectors: [ 2, 0, 0, 0 ]
; NATIVE-SYSTEM: NativeLowPrecision: true
; MIN-SYSTEM: MinimumPrecision: true
; SYSTEM: Name: ISG1
; SYSTEM: Name: SV_VertexID
; SIGNED: CompType: SInt16
; UNSIGNED: CompType: UInt16
; SYSTEM: Name: OSG1
; SYSTEM: Name: SV_Position
; SYSTEM: CompType: Float16
; SYSTEM: Mask: 15
; NATIVE-SYSTEM: MinPrecision: Default
; MIN-SYSTEM: MinPrecision: Float16
;--- system.ll
; Both system values accept 16-bit components in native and min-precision modes.
target triple = "dxil-pc-shadermodel6.8-vertex"
define void @main() #0 {
%id = call i16 @llvm.dx.load.input.i16(i32 0, i32 0, i8 0, i32 poison)
call void @llvm.dx.store.output.v4f16(i32 0, i32 0, i8 0, <4 x half> <half 0.0, half 0.0, half 0.0, half 1.0>)
ret void
}
attributes #0 = { "hlsl.shader"="vertex" }
!dx.semantic.signatures = !{!0}
!0 = !{ptr @main, !1, !2}
!1 = !{!3}
!2 = !{!4}
!4 = !{i32 0, !"SV_Position", i32 8, i32 3, !5, i32 0, i32 1, i8 4, i32 0, i8 0, i8 0, i8 0, i32 0}
!5 = !{i32 0}
;--- signed.ll
!3 = !{i32 0, !"SV_VertexID", i32 2, i32 1, !5, i32 0, i32 1, i8 1, i32 0, i8 0, i8 0, i8 0, i32 0}
;--- unsigned.ll
!3 = !{i32 0, !"SV_VertexID", i32 3, i32 1, !5, i32 0, i32 1, i8 1, i32 0, i8 0, i8 0, i8 0, i32 0}
;--- native-mode.ll
!llvm.module.flags = !{!6}
!6 = !{i32 1, !"dx.nativelowprec", i32 1}
;--- min-mode.ll
!llvm.module.flags = !{!6}
!6 = !{i32 1, !"dx.nativelowprec", i32 0}
;--- min.ll
target triple = "dxil-pc-shadermodel6.8-vertex"
define void @main() #0 { ret void }
attributes #0 = { "hlsl.shader"="vertex" }
!dx.semantic.signatures = !{!0}
!0 = !{ptr @main, null, !1}
!1 = !{!2, !3}
!2 = !{i32 0, !"A", i32 8, i32 0, !4, i32 0, i32 1, i8 1, i32 0, i8 0, i8 0, i8 0, i32 0}
!3 = !{i32 1, !"B", i32 9, i32 0, !4, i32 0, i32 1, i8 1, i32 0, i8 1, i8 0, i8 0, i32 0}
!4 = !{i32 0}
;--- native.ll
target triple = "dxil-pc-shadermodel6.8-vertex"
define void @main() #0 { ret void }
attributes #0 = { "hlsl.shader"="vertex" }
!llvm.module.flags = !{!5}
!5 = !{i32 1, !"dx.nativelowprec", i32 1}
!dx.semantic.signatures = !{!0}
!0 = !{ptr @main, null, !1}
!1 = !{!2, !3}
!2 = !{i32 0, !"A", i32 8, i32 0, !4, i32 0, i32 1, i8 1, i32 0, i8 0, i8 0, i8 0, i32 0}
!3 = !{i32 1, !"B", i32 9, i32 0, !4, i32 0, i32 1, i8 1, i32 1, i8 0, i8 0, i8 0, i32 0}
!4 = !{i32 0}