[PATCH] D30968: [AVX-512] Fix accidental uses of AH/BH/CH/DH after copies to/from mask registers

Craig Topper via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Mar 19 09:35:06 PDT 2017


craig.topper added a comment.

That's great news! But this problem isn't unique to VK1. This test fails in 32-bit mode with avx512vl

define void @test_cmp_d_256(<8 x i32> %a0, <8 x i32> %a1, i8* %foo) {

  %res0 = call i8 @llvm.x86.avx512.mask.cmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 0, i8 -1)
  %res1 = call i8 @llvm.x86.avx512.mask.cmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 1, i8 -1)
  %res2 = call i8 @llvm.x86.avx512.mask.cmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 2, i8 -1)
  %res3 = call i8 @llvm.x86.avx512.mask.cmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 3, i8 -1)
  %res4 = call i8 @llvm.x86.avx512.mask.cmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 4, i8 -1)
  %res5 = call i8 @llvm.x86.avx512.mask.cmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 5, i8 -1)
  %res6 = call i8 @llvm.x86.avx512.mask.cmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 6, i8 -1)
  %res7 = call i8 @llvm.x86.avx512.mask.cmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 7, i8 -1)
  %vec0 = add i8 %res0, %res1
  %vec1 = add i8 %res2, %res3
  %vec2 = add i8 %res4, %res5
  %vec3 = add i8 %res5, %res6
  %vec4 = and i8 %vec0, %vec1
  %vec5 = and i8 %vec2, %vec3
  %vec6 = add i8 %vec4, %vec5
  store i8 %vec6, i8* %foo
  ret void

}

declare i8 @llvm.x86.avx512.mask.cmp.d.256(<8 x i32>, <8 x i32>, i32, i8) nounwind readnone


https://reviews.llvm.org/D30968





More information about the llvm-commits mailing list