binary-op.comparison.vector.hlsl 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. // Run: %dxc -T ps_6_0 -E main
  2. void main() {
  3. // CHECK-LABEL: %bb_entry = OpLabel
  4. bool r1;
  5. bool2 r2;
  6. bool3 r3;
  7. bool4 r4;
  8. int1 a, b;
  9. int2 i, j;
  10. uint3 m, n;
  11. float4 o, p;
  12. bool2 x, y;
  13. // CHECK: [[a0:%\d+]] = OpLoad %int %a
  14. // CHECK-NEXT: [[b0:%\d+]] = OpLoad %int %b
  15. // CHECK-NEXT: {{%\d+}} = OpSLessThan %bool [[a0]] [[b0]]
  16. r1 = a < b;
  17. // CHECK: [[a1:%\d+]] = OpLoad %int %a
  18. // CHECK-NEXT: [[b1:%\d+]] = OpLoad %int %b
  19. // CHECK-NEXT: {{%\d+}} = OpSLessThanEqual %bool [[a1]] [[b1]]
  20. r1 = a <= b;
  21. // CHECK: [[a2:%\d+]] = OpLoad %int %a
  22. // CHECK-NEXT: [[b2:%\d+]] = OpLoad %int %b
  23. // CHECK-NEXT: {{%\d+}} = OpSGreaterThan %bool [[a2]] [[b2]]
  24. r1 = a > b;
  25. // CHECK: [[a3:%\d+]] = OpLoad %int %a
  26. // CHECK-NEXT: [[b3:%\d+]] = OpLoad %int %b
  27. // CHECK-NEXT: {{%\d+}} = OpSGreaterThanEqual %bool [[a3]] [[b3]]
  28. r1 = a >= b;
  29. // CHECK: [[a4:%\d+]] = OpLoad %int %a
  30. // CHECK-NEXT: [[b4:%\d+]] = OpLoad %int %b
  31. // CHECK-NEXT: {{%\d+}} = OpIEqual %bool [[a4]] [[b4]]
  32. r1 = a == b;
  33. // CHECK: [[a5:%\d+]] = OpLoad %int %a
  34. // CHECK-NEXT: [[b5:%\d+]] = OpLoad %int %b
  35. // CHECK-NEXT: {{%\d+}} = OpINotEqual %bool [[a5]] [[b5]]
  36. r1 = a != b;
  37. // CHECK: [[i0:%\d+]] = OpLoad %v2int %i
  38. // CHECK-NEXT: [[j0:%\d+]] = OpLoad %v2int %j
  39. // CHECK-NEXT: {{%\d+}} = OpSLessThan %v2bool [[i0]] [[j0]]
  40. r2 = i < j;
  41. // CHECK: [[i1:%\d+]] = OpLoad %v2int %i
  42. // CHECK-NEXT: [[j1:%\d+]] = OpLoad %v2int %j
  43. // CHECK-NEXT: {{%\d+}} = OpSLessThanEqual %v2bool [[i1]] [[j1]]
  44. r2 = i <= j;
  45. // CHECK: [[i2:%\d+]] = OpLoad %v2int %i
  46. // CHECK-NEXT: [[j2:%\d+]] = OpLoad %v2int %j
  47. // CHECK-NEXT: {{%\d+}} = OpSGreaterThan %v2bool [[i2]] [[j2]]
  48. r2 = i > j;
  49. // CHECK: [[i3:%\d+]] = OpLoad %v2int %i
  50. // CHECK-NEXT: [[j3:%\d+]] = OpLoad %v2int %j
  51. // CHECK-NEXT: {{%\d+}} = OpSGreaterThanEqual %v2bool [[i3]] [[j3]]
  52. r2 = i >= j;
  53. // CHECK: [[i4:%\d+]] = OpLoad %v2int %i
  54. // CHECK-NEXT: [[j4:%\d+]] = OpLoad %v2int %j
  55. // CHECK-NEXT: {{%\d+}} = OpIEqual %v2bool [[i4]] [[j4]]
  56. r2 = i == j;
  57. // CHECK: [[i5:%\d+]] = OpLoad %v2int %i
  58. // CHECK-NEXT: [[j5:%\d+]] = OpLoad %v2int %j
  59. // CHECK-NEXT: {{%\d+}} = OpINotEqual %v2bool [[i5]] [[j5]]
  60. r2 = i != j;
  61. // CHECK: [[m0:%\d+]] = OpLoad %v3uint %m
  62. // CHECK-NEXT: [[n0:%\d+]] = OpLoad %v3uint %n
  63. // CHECK-NEXT: {{%\d+}} = OpULessThan %v3bool [[m0]] [[n0]]
  64. r3 = m < n;
  65. // CHECK: [[m1:%\d+]] = OpLoad %v3uint %m
  66. // CHECK-NEXT: [[n1:%\d+]] = OpLoad %v3uint %n
  67. // CHECK-NEXT: {{%\d+}} = OpULessThanEqual %v3bool [[m1]] [[n1]]
  68. r3 = m <= n;
  69. // CHECK: [[m2:%\d+]] = OpLoad %v3uint %m
  70. // CHECK-NEXT: [[n2:%\d+]] = OpLoad %v3uint %n
  71. // CHECK-NEXT: {{%\d+}} = OpUGreaterThan %v3bool [[m2]] [[n2]]
  72. r3 = m > n;
  73. // CHECK: [[m3:%\d+]] = OpLoad %v3uint %m
  74. // CHECK-NEXT: [[n3:%\d+]] = OpLoad %v3uint %n
  75. // CHECK-NEXT: {{%\d+}} = OpUGreaterThanEqual %v3bool [[m3]] [[n3]]
  76. r3 = m >= n;
  77. // CHECK: [[m4:%\d+]] = OpLoad %v3uint %m
  78. // CHECK-NEXT: [[n4:%\d+]] = OpLoad %v3uint %n
  79. // CHECK-NEXT: {{%\d+}} = OpIEqual %v3bool [[m4]] [[n4]]
  80. r3 = m == n;
  81. // CHECK: [[m5:%\d+]] = OpLoad %v3uint %m
  82. // CHECK-NEXT: [[n5:%\d+]] = OpLoad %v3uint %n
  83. // CHECK-NEXT: {{%\d+}} = OpINotEqual %v3bool [[m5]] [[n5]]
  84. r3 = m != n;
  85. // CHECK: [[o0:%\d+]] = OpLoad %v4float %o
  86. // CHECK-NEXT: [[p0:%\d+]] = OpLoad %v4float %p
  87. // CHECK-NEXT: {{%\d+}} = OpFOrdLessThan %v4bool [[o0]] [[p0]]
  88. r4 = o < p;
  89. // CHECK: [[o1:%\d+]] = OpLoad %v4float %o
  90. // CHECK-NEXT: [[p1:%\d+]] = OpLoad %v4float %p
  91. // CHECK-NEXT: {{%\d+}} = OpFOrdLessThanEqual %v4bool [[o1]] [[p1]]
  92. r4 = o <= p;
  93. // CHECK: [[o2:%\d+]] = OpLoad %v4float %o
  94. // CHECK-NEXT: [[p2:%\d+]] = OpLoad %v4float %p
  95. // CHECK-NEXT: {{%\d+}} = OpFOrdGreaterThan %v4bool [[o2]] [[p2]]
  96. r4 = o > p;
  97. // CHECK: [[o3:%\d+]] = OpLoad %v4float %o
  98. // CHECK-NEXT: [[p3:%\d+]] = OpLoad %v4float %p
  99. // CHECK-NEXT: {{%\d+}} = OpFOrdGreaterThanEqual %v4bool [[o3]] [[p3]]
  100. r4 = o >= p;
  101. // CHECK: [[o4:%\d+]] = OpLoad %v4float %o
  102. // CHECK-NEXT: [[p4:%\d+]] = OpLoad %v4float %p
  103. // CHECK-NEXT: {{%\d+}} = OpFOrdEqual %v4bool [[o4]] [[p4]]
  104. r4 = o == p;
  105. // CHECK: [[o5:%\d+]] = OpLoad %v4float %o
  106. // CHECK-NEXT: [[p5:%\d+]] = OpLoad %v4float %p
  107. // CHECK-NEXT: {{%\d+}} = OpFOrdNotEqual %v4bool [[o5]] [[p5]]
  108. r4 = o != p;
  109. // CHECK: [[x0:%\d+]] = OpLoad %v2bool %x
  110. // CHECK-NEXT: [[y0:%\d+]] = OpLoad %v2bool %y
  111. // CHECK-NEXT: {{%\d+}} = OpLogicalEqual %v2bool [[x0]] [[y0]]
  112. r2 = x == y;
  113. // CHECK: [[x1:%\d+]] = OpLoad %v2bool %x
  114. // CHECK-NEXT: [[y1:%\d+]] = OpLoad %v2bool %y
  115. // CHECK-NEXT: {{%\d+}} = OpLogicalNotEqual %v2bool [[x1]] [[y1]]
  116. r2 = x != y;
  117. }