@@ -468,16 +468,14 @@ impl TypedStmt {
468
468
let mut bitonic = vec ! [ ] ;
469
469
for i in 0 ..num_elems_a {
470
470
let mut v = a[ i * elem_bits_a..( i + 1 ) * elem_bits_a] . to_vec ( ) ;
471
- for _ in 0 ..( max_elem_bits - elem_bits_a) {
472
- v. push ( 0 ) ;
473
- }
471
+ v. resize ( max_elem_bits, 0 ) ;
472
+ v. insert ( join_ty_size, 0 ) ;
474
473
bitonic. push ( v) ;
475
474
}
476
475
for i in ( 0 ..num_elems_b) . rev ( ) {
477
476
let mut v = b[ i * elem_bits_b..( i + 1 ) * elem_bits_b] . to_vec ( ) ;
478
- for _ in 0 ..( max_elem_bits - elem_bits_b) {
479
- v. push ( 0 ) ;
480
- }
477
+ v. resize ( max_elem_bits, 0 ) ;
478
+ v. insert ( join_ty_size, 1 ) ;
481
479
bitonic. push ( v) ;
482
480
}
483
481
let mut offset = num_elems / 2 ;
@@ -502,10 +500,14 @@ impl TypedStmt {
502
500
}
503
501
for slice in bitonic. windows ( 2 ) {
504
502
let mut binding = vec ! [ ] ;
505
- let a = & slice[ 0 ] [ ..elem_bits_a] ;
506
- let b = & slice[ 1 ] [ ..elem_bits_b] ;
507
- binding. extend ( a) ;
508
- binding. extend ( b) ;
503
+ let ( mut a, mut b) =
504
+ circuit. push_sorter ( join_ty_size + 1 , & slice[ 0 ] , & slice[ 1 ] ) ;
505
+ a. remove ( join_ty_size) ;
506
+ a. truncate ( elem_bits_a) ;
507
+ b. remove ( join_ty_size) ;
508
+ b. truncate ( elem_bits_b) ;
509
+ binding. extend ( & a) ;
510
+ binding. extend ( & b) ;
509
511
let join_a = & a[ ..join_ty_size] ;
510
512
let join_b = & b[ ..join_ty_size] ;
511
513
let mut join_eq = 1 ;
0 commit comments