[Mesa-dev] [llvm] r282237 - [InstCombine] Fix for PR29124: reduce insertelements to shufflevector

Michel Dänzer michel at daenzer.net
Mon Sep 26 07:06:57 UTC 2016


Hi Alexey,


On 23/09/16 06:14 PM, Alexey Bataev via llvm-commits wrote:
> Author: abataev
> Date: Fri Sep 23 04:14:08 2016
> New Revision: 282237
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=282237&view=rev
> Log:
> [InstCombine] Fix for PR29124: reduce insertelements to shufflevector

This change introduced failures with the Mesa llvmpipe driver unit test
lp_test_format. See below for information about the CPU, and the
attachment for the IR and results of the failing sub-tests. Let me know
if you need more information.


processor	: 0
vendor_id	: AuthenticAMD
cpu family	: 21
model		: 48
model name	: AMD A10-7850K Radeon R7, 12 Compute Cores 4C+8G
stepping	: 1
microcode	: 0x6003106
cpu MHz		: 4100.000
cache size	: 2048 KB
physical id	: 0
siblings	: 4
core id		: 0
cpu cores	: 2
apicid		: 16
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt
pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc extd_apicid
aperfmperf eagerfpu pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2
popcnt aes xsave avx f16c lahf_lm cmp_legacy svm extapic cr8_legacy abm
sse4a misalignsse 3dnowprefetch osvw ibs xop skinit wdt lwp fma4 tce
nodeid_msr tbm topoext perfctr_core perfctr_nb bpext arat cpb hw_pstate
npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid
decodeassists pausefilter pfthreshold vmmcall fsgsbase bmi1 xsaveopt
bugs		: fxsave_leak sysret_ss_attrs
bogomips	: 8200.55
TLB size	: 1536 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 48 bits physical, 48 bits virtual
power management: ts ttp tm 100mhzsteps hwpstate cpb eff_freq_ro [13]


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
-------------- next part --------------
define void @fetch_r32g32b32_float_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x float>*
  %7 = load <3 x float>, <3 x float>* %6, align 4
  %8 = shufflevector <3 x float> %7, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = shufflevector <4 x float> %8, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %9, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R32G32B32_FLOAT (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: 00 00 80 3f
  Unpacked (0,0): 1 1 0 0 obtained
                  1 0 0 1 expected
FAILED
  Packed: 00 00 80 bf
  Unpacked (0,0): -1 1 0 0 obtained
                  -1 0 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 1 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 -1 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 1 0 obtained
                  0 0 1 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 -1 0 obtained
                  0 0 -1 1 expected
FAILED
  Packed: 00 00 80 3f
  Unpacked (0,0): 1 1 1 0 obtained
                  1 1 1 1 expected

[...]

define void @fetch_r32g32b32_unorm_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i32>*
  %7 = load <3 x i32>, <3 x i32>* %6, align 4
  %8 = shufflevector <3 x i32> %7, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = lshr <4 x i32> %8, <i32 9, i32 9, i32 9, i32 9>
  %10 = or <4 x i32> %9, <i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216>
  %11 = bitcast <4 x i32> %10 to <4 x float>
  %12 = fsub <4 x float> %11, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
  %13 = fmul <4 x float> %12, <float 0x3FF0000020000000, float 0x3FF0000020000000, float 0x3FF0000020000000, float 0x3FF0000020000000>
  %14 = shufflevector <4 x float> %13, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %14, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R32G32B32_UNORM (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: ff ff ff ff
  Unpacked (0,0): 1 1 0 0 obtained
                  1 0 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 1 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 1 0 obtained
                  0 0 1 1 expected
FAILED
  Packed: ff ff ff ff
  Unpacked (0,0): 1 1 1 0 obtained
                  1 1 1 1 expected

[...]

define void @fetch_r32g32b32_uscaled_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i32>*
  %7 = load <3 x i32>, <3 x i32>* %6, align 4
  %8 = shufflevector <3 x i32> %7, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = sitofp <4 x i32> %8 to <4 x float>
  %10 = shufflevector <4 x float> %9, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %10, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R32G32B32_USCALED (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: 00 00 00 01
  Unpacked (0,0): 16777216 1 0 0 obtained
                  16777216 0 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 16777216 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 16777216 0 obtained
                  0 0 16777216 1 expected
FAILED
  Packed: 00 00 00 01
  Unpacked (0,0): 16777216 1 16777216 0 obtained
                  16777216 16777216 16777216 1 expected

[...]

define void @fetch_r32g32b32_snorm_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i32>*
  %7 = load <3 x i32>, <3 x i32>* %6, align 4
  %8 = shufflevector <3 x i32> %7, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = sitofp <4 x i32> %8 to <4 x float>
  %10 = fmul <4 x float> %9, <float 0x3E00000000000000, float 0x3E00000000000000, float 0x3E00000000000000, float 0x3E00000000000000>
  %11 = shufflevector <4 x float> %10, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %11, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R32G32B32_SNORM (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: ff ff ff 7f
  Unpacked (0,0): 1 1 0 0 obtained
                  1 0 0 1 expected
FAILED
  Packed: 01 00 00 80
  Unpacked (0,0): -1 1 0 0 obtained
                  -1 0 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 1 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 -1 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 1 0 obtained
                  0 0 1 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 -1 0 obtained
                  0 0 -1 1 expected

[...]

define void @fetch_r32g32b32_sscaled_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i32>*
  %7 = load <3 x i32>, <3 x i32>* %6, align 4
  %8 = shufflevector <3 x i32> %7, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = sitofp <4 x i32> %8 to <4 x float>
  %10 = shufflevector <4 x float> %9, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %10, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R32G32B32_SSCALED (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: 00 00 00 01
  Unpacked (0,0): 16777216 1 0 0 obtained
                  16777216 0 0 1 expected
FAILED
  Packed: 00 00 00 ff
  Unpacked (0,0): -16777216 1 0 0 obtained
                  -16777216 0 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 16777216 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 -16777216 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 16777216 0 obtained
                  0 0 16777216 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 -16777216 0 obtained
                  0 0 -16777216 1 expected

[...]

define void @fetch_r16g16b16_unorm_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i16>*
  %7 = load <3 x i16>, <3 x i16>* %6, align 2
  %8 = shufflevector <3 x i16> %7, <3 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = extractelement <4 x i16> %8, i32 0
  %10 = zext i16 %9 to i32
  %11 = insertelement <4 x i32> undef, i32 %10, i32 0
  %12 = extractelement <4 x i16> %8, i32 1
  %13 = zext i16 %12 to i32
  %14 = insertelement <4 x i32> %11, i32 %13, i32 1
  %15 = extractelement <4 x i16> %8, i32 2
  %16 = zext i16 %15 to i32
  %17 = insertelement <4 x i32> %14, i32 %16, i32 2
  %18 = extractelement <4 x i16> %8, i32 3
  %19 = zext i16 %18 to i32
  %20 = insertelement <4 x i32> %17, i32 %19, i32 3
  %21 = sitofp <4 x i32> %20 to <4 x float>
  %22 = fmul <4 x float> %21, <float 0x3EF0001000000000, float 0x3EF0001000000000, float 0x3EF0001000000000, float 0x3EF0001000000000>
  %23 = shufflevector <4 x float> %22, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %23, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R16G16B16_UNORM (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: ff ff 00 00
  Unpacked (0,0): 1 1 0 0 obtained
                  1 0 0 1 expected
FAILED
  Packed: 00 00 ff ff
  Unpacked (0,0): 0 1 0 0 obtained
                  0 1 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 1 0 obtained
                  0 0 1 1 expected
FAILED
  Packed: ff ff ff ff
  Unpacked (0,0): 1 1 1 0 obtained
                  1 1 1 1 expected

[...]

define void @fetch_r16g16b16_uscaled_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i16>*
  %7 = load <3 x i16>, <3 x i16>* %6, align 2
  %8 = shufflevector <3 x i16> %7, <3 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = extractelement <4 x i16> %8, i32 0
  %10 = zext i16 %9 to i32
  %11 = insertelement <4 x i32> undef, i32 %10, i32 0
  %12 = extractelement <4 x i16> %8, i32 1
  %13 = zext i16 %12 to i32
  %14 = insertelement <4 x i32> %11, i32 %13, i32 1
  %15 = extractelement <4 x i16> %8, i32 2
  %16 = zext i16 %15 to i32
  %17 = insertelement <4 x i32> %14, i32 %16, i32 2
  %18 = extractelement <4 x i16> %8, i32 3
  %19 = zext i16 %18 to i32
  %20 = insertelement <4 x i32> %17, i32 %19, i32 3
  %21 = sitofp <4 x i32> %20 to <4 x float>
  %22 = shufflevector <4 x float> %21, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %22, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R16G16B16_USCALED (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: ff ff 00 00
  Unpacked (0,0): 65535 1 0 0 obtained
                  65535 0 0 1 expected
FAILED
  Packed: 00 00 ff ff
  Unpacked (0,0): 0 1 0 0 obtained
                  0 65535 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 65535 0 obtained
                  0 0 65535 1 expected
FAILED
  Packed: ff ff ff ff
  Unpacked (0,0): 65535 1 65535 0 obtained
                  65535 65535 65535 1 expected

[...]

define void @fetch_r16g16b16_snorm_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i16>*
  %7 = load <3 x i16>, <3 x i16>* %6, align 2
  %8 = shufflevector <3 x i16> %7, <3 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = extractelement <4 x i16> %8, i32 0
  %10 = sext i16 %9 to i32
  %11 = insertelement <4 x i32> undef, i32 %10, i32 0
  %12 = extractelement <4 x i16> %8, i32 1
  %13 = sext i16 %12 to i32
  %14 = insertelement <4 x i32> %11, i32 %13, i32 1
  %15 = extractelement <4 x i16> %8, i32 2
  %16 = sext i16 %15 to i32
  %17 = insertelement <4 x i32> %14, i32 %16, i32 2
  %18 = extractelement <4 x i16> %8, i32 3
  %19 = sext i16 %18 to i32
  %20 = insertelement <4 x i32> %17, i32 %19, i32 3
  %21 = sitofp <4 x i32> %20 to <4 x float>
  %22 = fmul <4 x float> %21, <float 0x3F00002000000000, float 0x3F00002000000000, float 0x3F00002000000000, float 0x3F00002000000000>
  %23 = shufflevector <4 x float> %22, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %23, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R16G16B16_SNORM (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: ff 7f 00 00
  Unpacked (0,0): 1 1 0 0 obtained
                  1 0 0 1 expected
FAILED
  Packed: 01 80 00 00
  Unpacked (0,0): -1 1 0 0 obtained
                  -1 0 0 1 expected
FAILED
  Packed: 00 00 ff 7f
  Unpacked (0,0): 0 1 0 0 obtained
                  0 1 0 1 expected
FAILED
  Packed: 00 00 01 80
  Unpacked (0,0): 0 1 0 0 obtained
                  0 -1 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 1 0 obtained
                  0 0 1 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 -1 0 obtained
                  0 0 -1 1 expected

[...]

define void @fetch_r16g16b16_sscaled_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i16>*
  %7 = load <3 x i16>, <3 x i16>* %6, align 2
  %8 = shufflevector <3 x i16> %7, <3 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = extractelement <4 x i16> %8, i32 0
  %10 = sext i16 %9 to i32
  %11 = insertelement <4 x i32> undef, i32 %10, i32 0
  %12 = extractelement <4 x i16> %8, i32 1
  %13 = sext i16 %12 to i32
  %14 = insertelement <4 x i32> %11, i32 %13, i32 1
  %15 = extractelement <4 x i16> %8, i32 2
  %16 = sext i16 %15 to i32
  %17 = insertelement <4 x i32> %14, i32 %16, i32 2
  %18 = extractelement <4 x i16> %8, i32 3
  %19 = sext i16 %18 to i32
  %20 = insertelement <4 x i32> %17, i32 %19, i32 3
  %21 = sitofp <4 x i32> %20 to <4 x float>
  %22 = shufflevector <4 x float> %21, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %22, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R16G16B16_SSCALED (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: ff 7f 00 00
  Unpacked (0,0): 32767 1 0 0 obtained
                  32767 0 0 1 expected
FAILED
  Packed: 00 80 00 00
  Unpacked (0,0): -32768 1 0 0 obtained
                  -32768 0 0 1 expected
FAILED
  Packed: 00 00 ff 7f
  Unpacked (0,0): 0 1 0 0 obtained
                  0 32767 0 1 expected
FAILED
  Packed: 00 00 00 80
  Unpacked (0,0): 0 1 0 0 obtained
                  0 -32768 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 32767 0 obtained
                  0 0 32767 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 -32768 0 obtained
                  0 0 -32768 1 expected

[...]

define void @fetch_r8g8b8_unorm_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i8>*
  %7 = load <3 x i8>, <3 x i8>* %6, align 1
  %8 = shufflevector <3 x i8> %7, <3 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = extractelement <4 x i8> %8, i32 0
  %10 = zext i8 %9 to i32
  %11 = insertelement <4 x i32> undef, i32 %10, i32 0
  %12 = extractelement <4 x i8> %8, i32 1
  %13 = zext i8 %12 to i32
  %14 = insertelement <4 x i32> %11, i32 %13, i32 1
  %15 = extractelement <4 x i8> %8, i32 2
  %16 = zext i8 %15 to i32
  %17 = insertelement <4 x i32> %14, i32 %16, i32 2
  %18 = extractelement <4 x i8> %8, i32 3
  %19 = zext i8 %18 to i32
  %20 = insertelement <4 x i32> %17, i32 %19, i32 3
  %21 = sitofp <4 x i32> %20 to <4 x float>
  %22 = fmul <4 x float> %21, <float 0x3F70101020000000, float 0x3F70101020000000, float 0x3F70101020000000, float 0x3F70101020000000>
  %23 = shufflevector <4 x float> %22, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %23, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R8G8B8_UNORM (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: ff 00 00 00
  Unpacked (0,0): 1 1 0 0 obtained
                  1 0 0 1 expected
FAILED
  Packed: 00 ff 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 1 0 1 expected
FAILED
  Packed: 00 00 ff 00
  Unpacked (0,0): 0 1 1 0 obtained
                  0 0 1 1 expected
FAILED
  Packed: ff ff ff 00
  Unpacked (0,0): 1 1 1 0 obtained
                  1 1 1 1 expected

[...]

define void @fetch_r8g8b8_uscaled_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i8>*
  %7 = load <3 x i8>, <3 x i8>* %6, align 1
  %8 = shufflevector <3 x i8> %7, <3 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = extractelement <4 x i8> %8, i32 0
  %10 = zext i8 %9 to i32
  %11 = insertelement <4 x i32> undef, i32 %10, i32 0
  %12 = extractelement <4 x i8> %8, i32 1
  %13 = zext i8 %12 to i32
  %14 = insertelement <4 x i32> %11, i32 %13, i32 1
  %15 = extractelement <4 x i8> %8, i32 2
  %16 = zext i8 %15 to i32
  %17 = insertelement <4 x i32> %14, i32 %16, i32 2
  %18 = extractelement <4 x i8> %8, i32 3
  %19 = zext i8 %18 to i32
  %20 = insertelement <4 x i32> %17, i32 %19, i32 3
  %21 = sitofp <4 x i32> %20 to <4 x float>
  %22 = shufflevector <4 x float> %21, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %22, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R8G8B8_USCALED (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: ff 00 00 00
  Unpacked (0,0): 255 1 0 0 obtained
                  255 0 0 1 expected
FAILED
  Packed: 00 ff 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 255 0 1 expected
FAILED
  Packed: 00 00 ff 00
  Unpacked (0,0): 0 1 255 0 obtained
                  0 0 255 1 expected
FAILED
  Packed: ff ff ff 00
  Unpacked (0,0): 255 1 255 0 obtained
                  255 255 255 1 expected

[...]

define void @fetch_r8g8b8_snorm_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i8>*
  %7 = load <3 x i8>, <3 x i8>* %6, align 1
  %8 = shufflevector <3 x i8> %7, <3 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = extractelement <4 x i8> %8, i32 0
  %10 = sext i8 %9 to i32
  %11 = insertelement <4 x i32> undef, i32 %10, i32 0
  %12 = extractelement <4 x i8> %8, i32 1
  %13 = sext i8 %12 to i32
  %14 = insertelement <4 x i32> %11, i32 %13, i32 1
  %15 = extractelement <4 x i8> %8, i32 2
  %16 = sext i8 %15 to i32
  %17 = insertelement <4 x i32> %14, i32 %16, i32 2
  %18 = extractelement <4 x i8> %8, i32 3
  %19 = sext i8 %18 to i32
  %20 = insertelement <4 x i32> %17, i32 %19, i32 3
  %21 = sitofp <4 x i32> %20 to <4 x float>
  %22 = fmul <4 x float> %21, <float 0x3F80204080000000, float 0x3F80204080000000, float 0x3F80204080000000, float 0x3F80204080000000>
  %23 = shufflevector <4 x float> %22, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %23, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R8G8B8_SNORM (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: 7f 00 00 00
  Unpacked (0,0): 1 1 0 0 obtained
                  1 0 0 1 expected
FAILED
  Packed: 81 00 00 00
  Unpacked (0,0): -1 1 0 0 obtained
                  -1 0 0 1 expected
FAILED
  Packed: 00 7f 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 1 0 1 expected
FAILED
  Packed: 00 81 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 -1 0 1 expected
FAILED
  Packed: 00 00 7f 00
  Unpacked (0,0): 0 1 1 0 obtained
                  0 0 1 1 expected
FAILED
  Packed: 00 00 81 00
  Unpacked (0,0): 0 1 -1 0 obtained
                  0 0 -1 1 expected

[...]

define void @fetch_r8g8b8_sscaled_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i8>*
  %7 = load <3 x i8>, <3 x i8>* %6, align 1
  %8 = shufflevector <3 x i8> %7, <3 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = extractelement <4 x i8> %8, i32 0
  %10 = sext i8 %9 to i32
  %11 = insertelement <4 x i32> undef, i32 %10, i32 0
  %12 = extractelement <4 x i8> %8, i32 1
  %13 = sext i8 %12 to i32
  %14 = insertelement <4 x i32> %11, i32 %13, i32 1
  %15 = extractelement <4 x i8> %8, i32 2
  %16 = sext i8 %15 to i32
  %17 = insertelement <4 x i32> %14, i32 %16, i32 2
  %18 = extractelement <4 x i8> %8, i32 3
  %19 = sext i8 %18 to i32
  %20 = insertelement <4 x i32> %17, i32 %19, i32 3
  %21 = sitofp <4 x i32> %20 to <4 x float>
  %22 = shufflevector <4 x float> %21, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %22, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R8G8B8_SSCALED (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: 7f 00 00 00
  Unpacked (0,0): 127 1 0 0 obtained
                  127 0 0 1 expected
FAILED
  Packed: 80 00 00 00
  Unpacked (0,0): -128 1 0 0 obtained
                  -128 0 0 1 expected
FAILED
  Packed: 00 7f 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 127 0 1 expected
FAILED
  Packed: 00 80 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 -128 0 1 expected
FAILED
  Packed: 00 00 7f 00
  Unpacked (0,0): 0 1 127 0 obtained
                  0 0 127 1 expected
FAILED
  Packed: 00 00 80 00
  Unpacked (0,0): 0 1 -128 0 obtained
                  0 0 -128 1 expected

[...]

define void @fetch_r32g32b32_fixed_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i32>*
  %7 = load <3 x i32>, <3 x i32>* %6, align 4
  %8 = shufflevector <3 x i32> %7, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = sitofp <4 x i32> %8 to <4 x float>
  %10 = fmul <4 x float> %9, <float 0x3EF0000000000000, float 0x3EF0000000000000, float 0x3EF0000000000000, float 0x3EF0000000000000>
  %11 = shufflevector <4 x float> %10, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %11, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R32G32B32_FIXED (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: 00 00 01 00
  Unpacked (0,0): 1 1 0 0 obtained
                  1 0 0 1 expected
FAILED
  Packed: 00 00 ff ff
  Unpacked (0,0): -1 1 0 0 obtained
                  -1 0 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 1 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 -1 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 1 0 obtained
                  0 0 1 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 -1 0 obtained
                  0 0 -1 1 expected
FAILED
  Packed: 00 00 01 00
  Unpacked (0,0): 1 1 1 0 obtained
                  1 1 1 1 expected

[...]

define void @fetch_r16g16b16_float_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to <3 x i16>*
  %7 = load <3 x i16>, <3 x i16>* %6, align 2
  %8 = shufflevector <3 x i16> %7, <3 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %9 = zext <4 x i16> %8 to <4 x i32>
  %10 = shl <4 x i32> %9, <i32 13, i32 13, i32 13, i32 13>
  %11 = and <4 x i32> %10, <i32 268427264, i32 268427264, i32 268427264, i32 268427264>
  %12 = icmp slt <4 x i32> %11, <i32 8388608, i32 8388608, i32 8388608, i32 8388608>
  %13 = sext <4 x i1> %12 to <4 x i32>
  %14 = icmp sge <4 x i32> %11, <i32 260046848, i32 260046848, i32 260046848, i32 260046848>
  %15 = sext <4 x i1> %14 to <4 x i32>
  %16 = or <4 x i32> %11, <i32 947912704, i32 947912704, i32 947912704, i32 947912704>
  %17 = bitcast <4 x i32> %16 to <4 x float>
  %18 = fsub <4 x float> %17, <float 0x3F10000000000000, float 0x3F10000000000000, float 0x3F10000000000000, float 0x3F10000000000000>
  %19 = bitcast <4 x float> %18 to <4 x i32>
  %20 = add <4 x i32> %11, <i32 939524096, i32 939524096, i32 939524096, i32 939524096>
  %21 = and <4 x i32> %15, <i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040>
  %22 = or <4 x i32> %21, %20
  %23 = trunc <4 x i32> %13 to <4 x i1>
  %24 = select <4 x i1> %23, <4 x i32> %19, <4 x i32> %22
  %25 = shl <4 x i32> %10, <i32 3, i32 3, i32 3, i32 3>
  %26 = and <4 x i32> <i32 -2147483648, i32 -2147483648, i32 -2147483648, i32 -2147483648>, %25
  %27 = or <4 x i32> %24, %26
  %28 = bitcast <4 x i32> %27 to <4 x float>
  %29 = shufflevector <4 x float> %28, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %29, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R16G16B16_FLOAT (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 3.87031515e-36 obtained
                  0 0 0 1 expected
FAILED
  Packed: 00 3c 00 00
  Unpacked (0,0): 1 1 0 3.87031515e-36 obtained
                  1 0 0 1 expected
FAILED
  Packed: 00 bc 00 00
  Unpacked (0,0): -1 1 0 3.87031515e-36 obtained
                  -1 0 0 1 expected
FAILED
  Packed: 00 00 00 3c
  Unpacked (0,0): 0 1 0 3.87031515e-36 obtained
                  0 1 0 1 expected
FAILED
  Packed: 00 00 00 bc
  Unpacked (0,0): 0 1 0 3.87031515e-36 obtained
                  0 -1 0 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 1 3.87031515e-36 obtained
                  0 0 1 1 expected
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 -1 3.87031515e-36 obtained
                  0 0 -1 1 expected
FAILED
  Packed: 00 3c 00 3c
  Unpacked (0,0): 1 1 1 3.87031515e-36 obtained
                  1 1 1 1 expected

[...]

define void @fetch_r10g10b10x2_uscaled_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to i32*
  %7 = load i32, i32* %6
  %8 = insertelement <4 x i32> undef, i32 %7, i32 0
  %9 = shufflevector <4 x i32> %8, <4 x i32> undef, <4 x i32> zeroinitializer
  %10 = lshr <4 x i32> %9, <i32 0, i32 10, i32 20, i32 undef>
  %11 = and <4 x i32> %10, <i32 1023, i32 1023, i32 1023, i32 0>
  %12 = sitofp <4 x i32> %11 to <4 x float>
  %13 = shufflevector <4 x float> %12, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %13, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R10G10B10X2_USCALED (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: ff 03 00 00
  Unpacked (0,0): 1023 1 0 0 obtained
                  1023 0 0 1 expected
FAILED
  Packed: 00 fc 0f 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 1023 0 1 expected
FAILED
  Packed: 00 00 f0 3f
  Unpacked (0,0): 0 1 1023 0 obtained
                  0 0 1023 1 expected
FAILED
  Packed: ff ff ff 3f
  Unpacked (0,0): 1023 1 1023 0 obtained
                  1023 1023 1023 1 expected

[...]

define void @fetch_r8g8b8x8_unorm_float(<4 x float>*, i8*, i32, i32, { [2048 x i32], [128 x i64] }*) {
entry:
  %5 = getelementptr i8, i8* %1, i32 0
  %6 = bitcast i8* %5 to i32*
  %7 = load i32, i32* %6
  %8 = insertelement <4 x i32> undef, i32 %7, i32 0
  %9 = shufflevector <4 x i32> %8, <4 x i32> undef, <4 x i32> zeroinitializer
  %10 = lshr <4 x i32> %9, <i32 0, i32 8, i32 16, i32 undef>
  %11 = and <4 x i32> %10, <i32 255, i32 255, i32 255, i32 0>
  %12 = sitofp <4 x i32> %11 to <4 x float>
  %13 = fmul <4 x float> %12, <float 0x3F70101020000000, float 0x3F70101020000000, float 0x3F70101020000000, float 0.000000e+00>
  %14 = shufflevector <4 x float> %13, <4 x float> <float undef, float 1.000000e+00, float undef, float undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
  store <4 x float> %14, <4 x float>* %0
  ret void
}

Testing PIPE_FORMAT_R8G8B8X8_UNORM (float) ...
FAILED
  Packed: 00 00 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: ff 00 00 00
  Unpacked (0,0): 1 1 0 0 obtained
                  1 0 0 1 expected
FAILED
  Packed: 00 ff 00 00
  Unpacked (0,0): 0 1 0 0 obtained
                  0 1 0 1 expected
FAILED
  Packed: 00 00 ff 00
  Unpacked (0,0): 0 1 1 0 obtained
                  0 0 1 1 expected
FAILED
  Packed: 00 00 00 ff
  Unpacked (0,0): 0 1 0 0 obtained
                  0 0 0 1 expected
FAILED
  Packed: ff ff ff ff
  Unpacked (0,0): 1 1 1 0 obtained
                  1 1 1 1 expected


More information about the mesa-dev mailing list