// Run: %dxc -T ps_6_0 -E main

void main() {
// CHECK-LABEL: %bb_entry = OpLabel

    bool  r1;
    bool2 r2;
    bool3 r3;
    bool4 r4;

    int1  a, b;
    int2   i, j;
    uint3  m, n;
    float4 o, p;
    bool2  x, y;

// CHECK:      [[a0:%\d+]] = OpLoad %int %a
// CHECK-NEXT: [[b0:%\d+]] = OpLoad %int %b
// CHECK-NEXT: {{%\d+}} = OpSLessThan %bool [[a0]] [[b0]]
    r1 = a < b;
// CHECK:      [[a1:%\d+]] = OpLoad %int %a
// CHECK-NEXT: [[b1:%\d+]] = OpLoad %int %b
// CHECK-NEXT: {{%\d+}} = OpSLessThanEqual %bool [[a1]] [[b1]]
    r1 = a <= b;
// CHECK:      [[a2:%\d+]] = OpLoad %int %a
// CHECK-NEXT: [[b2:%\d+]] = OpLoad %int %b
// CHECK-NEXT: {{%\d+}} = OpSGreaterThan %bool [[a2]] [[b2]]
    r1 = a > b;
// CHECK:      [[a3:%\d+]] = OpLoad %int %a
// CHECK-NEXT: [[b3:%\d+]] = OpLoad %int %b
// CHECK-NEXT: {{%\d+}} = OpSGreaterThanEqual %bool [[a3]] [[b3]]
    r1 = a >= b;
// CHECK:      [[a4:%\d+]] = OpLoad %int %a
// CHECK-NEXT: [[b4:%\d+]] = OpLoad %int %b
// CHECK-NEXT: {{%\d+}} = OpIEqual %bool [[a4]] [[b4]]
    r1 = a == b;
// CHECK:      [[a5:%\d+]] = OpLoad %int %a
// CHECK-NEXT: [[b5:%\d+]] = OpLoad %int %b
// CHECK-NEXT: {{%\d+}} = OpINotEqual %bool [[a5]] [[b5]]
    r1 = a != b;

// CHECK:      [[i0:%\d+]] = OpLoad %v2int %i
// CHECK-NEXT: [[j0:%\d+]] = OpLoad %v2int %j
// CHECK-NEXT: {{%\d+}} = OpSLessThan %v2bool [[i0]] [[j0]]
    r2 = i < j;
// CHECK:      [[i1:%\d+]] = OpLoad %v2int %i
// CHECK-NEXT: [[j1:%\d+]] = OpLoad %v2int %j
// CHECK-NEXT: {{%\d+}} = OpSLessThanEqual %v2bool [[i1]] [[j1]]
    r2 = i <= j;
// CHECK:      [[i2:%\d+]] = OpLoad %v2int %i
// CHECK-NEXT: [[j2:%\d+]] = OpLoad %v2int %j
// CHECK-NEXT: {{%\d+}} = OpSGreaterThan %v2bool [[i2]] [[j2]]
    r2 = i > j;
// CHECK:      [[i3:%\d+]] = OpLoad %v2int %i
// CHECK-NEXT: [[j3:%\d+]] = OpLoad %v2int %j
// CHECK-NEXT: {{%\d+}} = OpSGreaterThanEqual %v2bool [[i3]] [[j3]]
    r2 = i >= j;
// CHECK:      [[i4:%\d+]] = OpLoad %v2int %i
// CHECK-NEXT: [[j4:%\d+]] = OpLoad %v2int %j
// CHECK-NEXT: {{%\d+}} = OpIEqual %v2bool [[i4]] [[j4]]
    r2 = i == j;
// CHECK:      [[i5:%\d+]] = OpLoad %v2int %i
// CHECK-NEXT: [[j5:%\d+]] = OpLoad %v2int %j
// CHECK-NEXT: {{%\d+}} = OpINotEqual %v2bool [[i5]] [[j5]]
    r2 = i != j;

// CHECK:      [[m0:%\d+]] = OpLoad %v3uint %m
// CHECK-NEXT: [[n0:%\d+]] = OpLoad %v3uint %n
// CHECK-NEXT: {{%\d+}} = OpULessThan %v3bool [[m0]] [[n0]]
    r3 = m < n;
// CHECK:      [[m1:%\d+]] = OpLoad %v3uint %m
// CHECK-NEXT: [[n1:%\d+]] = OpLoad %v3uint %n
// CHECK-NEXT: {{%\d+}} = OpULessThanEqual %v3bool [[m1]] [[n1]]
    r3 = m <= n;
// CHECK:      [[m2:%\d+]] = OpLoad %v3uint %m
// CHECK-NEXT: [[n2:%\d+]] = OpLoad %v3uint %n
// CHECK-NEXT: {{%\d+}} = OpUGreaterThan %v3bool [[m2]] [[n2]]
    r3 = m > n;
// CHECK:      [[m3:%\d+]] = OpLoad %v3uint %m
// CHECK-NEXT: [[n3:%\d+]] = OpLoad %v3uint %n
// CHECK-NEXT: {{%\d+}} = OpUGreaterThanEqual %v3bool [[m3]] [[n3]]
    r3 = m >= n;
// CHECK:      [[m4:%\d+]] = OpLoad %v3uint %m
// CHECK-NEXT: [[n4:%\d+]] = OpLoad %v3uint %n
// CHECK-NEXT: {{%\d+}} = OpIEqual %v3bool [[m4]] [[n4]]
    r3 = m == n;
// CHECK:      [[m5:%\d+]] = OpLoad %v3uint %m
// CHECK-NEXT: [[n5:%\d+]] = OpLoad %v3uint %n
// CHECK-NEXT: {{%\d+}} = OpINotEqual %v3bool [[m5]] [[n5]]
    r3 = m != n;

// CHECK:      [[o0:%\d+]] = OpLoad %v4float %o
// CHECK-NEXT: [[p0:%\d+]] = OpLoad %v4float %p
// CHECK-NEXT: {{%\d+}} = OpFOrdLessThan %v4bool [[o0]] [[p0]]
    r4 = o < p;
// CHECK:      [[o1:%\d+]] = OpLoad %v4float %o
// CHECK-NEXT: [[p1:%\d+]] = OpLoad %v4float %p
// CHECK-NEXT: {{%\d+}} = OpFOrdLessThanEqual %v4bool [[o1]] [[p1]]
    r4 = o <= p;
// CHECK:      [[o2:%\d+]] = OpLoad %v4float %o
// CHECK-NEXT: [[p2:%\d+]] = OpLoad %v4float %p
// CHECK-NEXT: {{%\d+}} = OpFOrdGreaterThan %v4bool [[o2]] [[p2]]
    r4 = o > p;
// CHECK:      [[o3:%\d+]] = OpLoad %v4float %o
// CHECK-NEXT: [[p3:%\d+]] = OpLoad %v4float %p
// CHECK-NEXT: {{%\d+}} = OpFOrdGreaterThanEqual %v4bool [[o3]] [[p3]]
    r4 = o >= p;
// CHECK:      [[o4:%\d+]] = OpLoad %v4float %o
// CHECK-NEXT: [[p4:%\d+]] = OpLoad %v4float %p
// CHECK-NEXT: {{%\d+}} = OpFOrdEqual %v4bool [[o4]] [[p4]]
    r4 = o == p;
// CHECK:      [[o5:%\d+]] = OpLoad %v4float %o
// CHECK-NEXT: [[p5:%\d+]] = OpLoad %v4float %p
// CHECK-NEXT: {{%\d+}} = OpFOrdNotEqual %v4bool [[o5]] [[p5]]
    r4 = o != p;

// CHECK:      [[x0:%\d+]] = OpLoad %v2bool %x
// CHECK-NEXT: [[y0:%\d+]] = OpLoad %v2bool %y
// CHECK-NEXT: {{%\d+}} = OpLogicalEqual %v2bool [[x0]] [[y0]]
    r2 = x == y;
// CHECK:      [[x1:%\d+]] = OpLoad %v2bool %x
// CHECK-NEXT: [[y1:%\d+]] = OpLoad %v2bool %y
// CHECK-NEXT: {{%\d+}} = OpLogicalNotEqual %v2bool [[x1]] [[y1]]
    r2 = x != y;
}
