blob: a58cee276a48524e5f02077137a5d7ce18927327 [file] [edit]
; RUN: split-file %s %t
; RUN: cat %t/common.ll %t/min.ll > %t/min-input.ll
; RUN: cat %t/common.ll %t/native.ll > %t/native-input.ll
; RUN: llc -filetype=obj %t/min-input.ll -o %t/min.dxbc
; RUN: llc -filetype=obj %t/native-input.ll -o %t/native.dxbc
; RUN: obj2yaml %t/min.dxbc | FileCheck %s --check-prefixes=CHECK-YAML,CHECK-YAML-MIN
; RUN: obj2yaml %t/native.dxbc | FileCheck %s --check-prefixes=CHECK-YAML,CHECK-YAML-NATIVE
; RUN: llvm-objcopy --dump-section=DXIL=%t/min.bc %t/min.dxbc
; RUN: llvm-objcopy --dump-section=DXIL=%t/native.bc %t/native.dxbc
; RUN: llvm-dis %t/min.bc -o - | FileCheck %s --check-prefixes=CHECK-DXIL,CHECK-DXIL-MIN
; RUN: llvm-dis %t/native.bc -o - | FileCheck %s --check-prefixes=CHECK-DXIL,CHECK-DXIL-NATIVE
; Each interpolation is tested in its own valid single-declaration signature.
; F16 remains an ordinary loadInput overload in both precision modes. Its
; unallocated location must not change component-relative masks or consume rows.
; CHECK-YAML-MIN: MinimumPrecision: true
; CHECK-YAML-MIN: NativeLowPrecision: false
; CHECK-YAML-NATIVE: MinimumPrecision: false
; CHECK-YAML-NATIVE: NativeLowPrecision: true
; CHECK-YAML: Name: ISG1
; CHECK-YAML: Name: SV_Barycentrics
; CHECK-YAML-NEXT: Index: 0
; CHECK-YAML-NEXT: SystemValue: Barycentrics
; CHECK-YAML-NEXT: CompType: Float16
; CHECK-YAML-NEXT: Register: 4294967295
; CHECK-YAML-NEXT: Mask: 7
; CHECK-YAML-NEXT: ExclusiveMask: 4
; CHECK-YAML-MIN-NEXT: MinPrecision: Float16
; CHECK-YAML-NATIVE-NEXT: MinPrecision: Default
; CHECK-YAML: Name: PSV0
; CHECK-YAML-MIN: SampleFrequency: 1
; CHECK-YAML-NATIVE: SampleFrequency: 0
; CHECK-YAML: SigInputVectors: 0
; CHECK-YAML: SigOutputVectors: [ 1, 0, 0, 0 ]
; CHECK-YAML: SigInputElements:
; CHECK-YAML: Indices: [ 0 ]
; CHECK-YAML-NEXT: StartRow: 0
; CHECK-YAML-NEXT: Cols: 3
; CHECK-YAML-NEXT: StartCol: 0
; CHECK-YAML-NEXT: Allocated: false
; CHECK-YAML-NEXT: Kind: Barycentrics
; CHECK-YAML-MIN: Interpolation: LinearSample
; CHECK-YAML-NATIVE: Interpolation: LinearNoperspectiveCentroid
; CHECK-YAML: InputOutputMap:
; CHECK-YAML-NEXT: - [ ]
; CHECK-DXIL: call half @dx.op.loadInput.f16(i32 4, i32 0, i32 0, i8 2, i32 {{.*}})
; CHECK-DXIL-MIN: !{i32 0, !"SV_Barycentrics", i8 8, i8 28, !{{[0-9]+}}, i8 6, i32 1, i8 3, i32 -1, i8 -1, ![[MASK:[0-9]+]]}
; CHECK-DXIL-NATIVE: !{i32 0, !"SV_Barycentrics", i8 8, i8 28, !{{[0-9]+}}, i8 5, i32 1, i8 3, i32 -1, i8 -1, ![[MASK:[0-9]+]]}
; CHECK-DXIL: ![[MASK]] = !{i32 3, i32 4}
;--- common.ll
target triple = "dxil-pc-shadermodel6.2-pixel"
define void @main() #0 {
%b = call half @llvm.dx.load.input.f16(i32 0, i32 0, i8 2, i32 poison)
%f = fpext half %b to float
call void @llvm.dx.store.output.f32(i32 0, i32 0, i8 0, float %f)
ret void
}
attributes #0 = { "hlsl.shader"="pixel" }
!dx.valver = !{!9}
!9 = !{i32 1, i32 8}
!dx.semantic.signatures = !{!0}
!0 = !{ptr @main, !1, !2}
!1 = !{!3}
!2 = !{!4}
!4 = !{i32 0, !"SV_Target", i32 9, i32 16, !5, i32 0, i32 1, i8 1, i32 0, i8 0, i8 0, i8 0, i32 0}
!5 = !{i32 0}
;--- min.ll
!llvm.module.flags = !{!6}
!6 = !{i32 1, !"dx.nativelowprec", i32 0}
!3 = !{i32 0, !"SV_Barycentrics", i32 8, i32 28, !5, i32 6, i32 1, i8 3, i32 -1, i8 -1, i8 0, i8 0, i32 0}
;--- native.ll
!llvm.module.flags = !{!6}
!6 = !{i32 1, !"dx.nativelowprec", i32 1}
!3 = !{i32 0, !"SV_Barycentrics", i32 8, i32 28, !5, i32 5, i32 1, i8 3, i32 -1, i8 -1, i8 0, i8 0, i32 0}