@@ -682,6 +682,32 @@ def test_matching_single_user_permutes_moved_after_cat(self) -> None:
682682 placeholder_nodes = converted .graph .find_nodes (op = "placeholder" )
683683 self .assertEqual (cat_nodes [0 ].args [0 ], placeholder_nodes )
684684
685+ def test_repeated_permute_input_not_moved (self ) -> None :
686+ x_data = torch .randn (1 , 16 , 32 )
687+ builder = GraphBuilder ()
688+ x = builder .placeholder ("x" , x_data )
689+ permuted_x = builder .call_operator (
690+ exir_ops .edge .aten .permute_copy .default ,
691+ args = (x , [1 , 2 , 0 ]),
692+ )
693+ cat = builder .call_operator (
694+ exir_ops .edge .aten .cat .default ,
695+ args = ([permuted_x , permuted_x ], 2 ),
696+ )
697+ builder .output ([cat ])
698+
699+ result = transform_and_check_numerics (
700+ builder .get_graph_module (),
701+ (x_data ,),
702+ MovePermuteAfterConcat (),
703+ )
704+
705+ self .assertFalse (result .modified )
706+ self .assertEqual (
707+ get_compute_nodes_in_gm (result .graph_module ),
708+ [exir_ops .edge .aten .permute_copy , exir_ops .edge .aten .cat ],
709+ )
710+
685711 def test_different_permutations_not_moved (self ) -> None :
686712 builder = GraphBuilder ()
687713 x = builder .placeholder ("x" , torch .randn (2 , 3 , 4 ))
0 commit comments