|
| 1 | +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 6 |
| 2 | +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.7-library -disable-llvm-passes -emit-llvm -finclude-default-header -o - %s | FileCheck %s |
| 3 | + |
| 4 | +// CHECK-LABEL: define hidden void @_Z13ConstantSplatv( |
| 5 | +// CHECK-SAME: ) #[[ATTR0:[0-9]+]] { |
| 6 | +// CHECK-NEXT: [[ENTRY:.*:]] |
| 7 | +// CHECK-NEXT: [[M:%.*]] = alloca [16 x i32], align 4 |
| 8 | +// CHECK-NEXT: store <16 x i32> splat (i32 1), ptr [[M]], align 4 |
| 9 | +// CHECK-NEXT: ret void |
| 10 | +// |
| 11 | +void ConstantSplat() { |
| 12 | + int4x4 M = 1; |
| 13 | +} |
| 14 | + |
| 15 | +// CHECK-LABEL: define hidden void @_Z18ConstantFloatSplatv( |
| 16 | +// CHECK-SAME: ) #[[ATTR0]] { |
| 17 | +// CHECK-NEXT: [[ENTRY:.*:]] |
| 18 | +// CHECK-NEXT: [[M:%.*]] = alloca [4 x float], align 4 |
| 19 | +// CHECK-NEXT: store <4 x float> splat (float 3.250000e+00), ptr [[M]], align 4 |
| 20 | +// CHECK-NEXT: ret void |
| 21 | +// |
| 22 | +void ConstantFloatSplat() { |
| 23 | + float2x2 M = 3.25; |
| 24 | +} |
| 25 | + |
| 26 | +// CHECK-LABEL: define hidden void @_Z12DynamicSplatf( |
| 27 | +// CHECK-SAME: float noundef nofpclass(nan inf) [[VALUE:%.*]]) #[[ATTR0]] { |
| 28 | +// CHECK-NEXT: [[ENTRY:.*:]] |
| 29 | +// CHECK-NEXT: [[VALUE_ADDR:%.*]] = alloca float, align 4 |
| 30 | +// CHECK-NEXT: [[M:%.*]] = alloca [9 x float], align 4 |
| 31 | +// CHECK-NEXT: store float [[VALUE]], ptr [[VALUE_ADDR]], align 4 |
| 32 | +// CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[VALUE_ADDR]], align 4 |
| 33 | +// CHECK-NEXT: [[SPLAT_SPLATINSERT:%.*]] = insertelement <9 x float> poison, float [[TMP0]], i64 0 |
| 34 | +// CHECK-NEXT: [[SPLAT_SPLAT:%.*]] = shufflevector <9 x float> [[SPLAT_SPLATINSERT]], <9 x float> poison, <9 x i32> zeroinitializer |
| 35 | +// CHECK-NEXT: store <9 x float> [[SPLAT_SPLAT]], ptr [[M]], align 4 |
| 36 | +// CHECK-NEXT: ret void |
| 37 | +// |
| 38 | +void DynamicSplat(float Value) { |
| 39 | + float3x3 M = Value; |
| 40 | +} |
| 41 | + |
| 42 | +// CHECK-LABEL: define hidden void @_Z13CastThenSplatDv4_f( |
| 43 | +// CHECK-SAME: <4 x float> noundef nofpclass(nan inf) [[VALUE:%.*]]) #[[ATTR0]] { |
| 44 | +// CHECK-NEXT: [[ENTRY:.*:]] |
| 45 | +// CHECK-NEXT: [[VALUE_ADDR:%.*]] = alloca <4 x float>, align 16 |
| 46 | +// CHECK-NEXT: [[M:%.*]] = alloca [9 x float], align 4 |
| 47 | +// CHECK-NEXT: store <4 x float> [[VALUE]], ptr [[VALUE_ADDR]], align 16 |
| 48 | +// CHECK-NEXT: [[TMP0:%.*]] = load <4 x float>, ptr [[VALUE_ADDR]], align 16 |
| 49 | +// CHECK-NEXT: [[CAST_VTRUNC:%.*]] = extractelement <4 x float> [[TMP0]], i32 0 |
| 50 | +// CHECK-NEXT: [[SPLAT_SPLATINSERT:%.*]] = insertelement <9 x float> poison, float [[CAST_VTRUNC]], i64 0 |
| 51 | +// CHECK-NEXT: [[SPLAT_SPLAT:%.*]] = shufflevector <9 x float> [[SPLAT_SPLATINSERT]], <9 x float> poison, <9 x i32> zeroinitializer |
| 52 | +// CHECK-NEXT: store <9 x float> [[SPLAT_SPLAT]], ptr [[M]], align 4 |
| 53 | +// CHECK-NEXT: ret void |
| 54 | +// |
| 55 | +void CastThenSplat(float4 Value) { |
| 56 | + float3x3 M = (float) Value; |
| 57 | +} |
0 commit comments