vector_arith.ll 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. ; RUN: opt < %s -msan -msan-check-access-address=0 -S | FileCheck %s
  2. target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
  3. target triple = "x86_64-unknown-linux-gnu"
  4. declare <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16>, <8 x i16>) nounwind readnone
  5. declare x86_mmx @llvm.x86.ssse3.pmadd.ub.sw(x86_mmx, x86_mmx) nounwind readnone
  6. declare <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8>, <16 x i8>) nounwind readnone
  7. declare x86_mmx @llvm.x86.mmx.psad.bw(x86_mmx, x86_mmx) nounwind readnone
  8. define <4 x i32> @Test_sse2_pmadd_wd(<8 x i16> %a, <8 x i16> %b) sanitize_memory {
  9. entry:
  10. %c = tail call <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16> %a, <8 x i16> %b) nounwind
  11. ret <4 x i32> %c
  12. }
  13. ; CHECK-LABEL: @Test_sse2_pmadd_wd(
  14. ; CHECK: or <8 x i16>
  15. ; CHECK: bitcast <8 x i16> {{.*}} to <4 x i32>
  16. ; CHECK: icmp ne <4 x i32> {{.*}}, zeroinitializer
  17. ; CHECK: sext <4 x i1> {{.*}} to <4 x i32>
  18. ; CHECK: ret <4 x i32>
  19. define x86_mmx @Test_ssse3_pmadd_ub_sw(x86_mmx %a, x86_mmx %b) sanitize_memory {
  20. entry:
  21. %c = tail call x86_mmx @llvm.x86.ssse3.pmadd.ub.sw(x86_mmx %a, x86_mmx %b) nounwind
  22. ret x86_mmx %c
  23. }
  24. ; CHECK-LABEL: @Test_ssse3_pmadd_ub_sw(
  25. ; CHECK: or i64
  26. ; CHECK: bitcast i64 {{.*}} to <4 x i16>
  27. ; CHECK: icmp ne <4 x i16> {{.*}}, zeroinitializer
  28. ; CHECK: sext <4 x i1> {{.*}} to <4 x i16>
  29. ; CHECK: bitcast <4 x i16> {{.*}} to i64
  30. ; CHECK: ret x86_mmx
  31. define <2 x i64> @Test_x86_sse2_psad_bw(<16 x i8> %a, <16 x i8> %b) sanitize_memory {
  32. %c = tail call <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8> %a, <16 x i8> %b)
  33. ret <2 x i64> %c
  34. }
  35. ; CHECK-LABEL: @Test_x86_sse2_psad_bw(
  36. ; CHECK: or <16 x i8> {{.*}}, {{.*}}
  37. ; CHECK: bitcast <16 x i8> {{.*}} to <2 x i64>
  38. ; CHECK: icmp ne <2 x i64> {{.*}}, zeroinitializer
  39. ; CHECK: sext <2 x i1> {{.*}} to <2 x i64>
  40. ; CHECK: lshr <2 x i64> {{.*}}, <i64 48, i64 48>
  41. ; CHECK: ret <2 x i64>
  42. define x86_mmx @Test_x86_mmx_psad_bw(x86_mmx %a, x86_mmx %b) sanitize_memory {
  43. entry:
  44. %c = tail call x86_mmx @llvm.x86.mmx.psad.bw(x86_mmx %a, x86_mmx %b) nounwind
  45. ret x86_mmx %c
  46. }
  47. ; CHECK-LABEL: @Test_x86_mmx_psad_bw(
  48. ; CHECK: or i64
  49. ; CHECK: icmp ne i64
  50. ; CHECK: sext i1 {{.*}} to i64
  51. ; CHECK: lshr i64 {{.*}}, 48
  52. ; CHECK: ret x86_mmx