Skip to content

✨[Feature] Support negative dimension slicing in the dynamic shape case #4326

@narendasan

Description

@narendasan

Is your feature request related to a problem? Please describe.

Patterns like this are starting to show up, starting with PyTorch 2.12. Presumably this is some thing similar to x[0:-2]. However, one of the values is a symbolic shape now.

2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._TRTInterpreter - INFO - Converted node /neg [<built-in function neg>] (Inputs: (add_176: (((s65 - 1)//8)) + 1@SymInt) | Outputs: (neg: -(((s65 - 1)//8)) - 1@SymInt))
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._TRTInterpreter - DEBUG - Converting node /slice_2 (kind: aten.slice.Tensor, args: ('full <Node>', '2 <int>', 'neg <Node>'))
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._ConverterRegistry - DEBUG - Converter options for aten.slice.Tensor: 1
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._ConverterRegistry - DEBUG - Selecting converter option 0 for converting aten.slice.Tensor
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion.impl.elementwise.base - INFO - skip broadcast for /slice_2_shape
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion.impl.elementwise.base - INFO - skip broadcast for /slice_2_sub_stop
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion.impl.elementwise.base - INFO - skip broadcast for /slice_2_sub_num
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion.impl.elementwise.base - INFO - skip broadcast for /slice_2_div
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion.impl.elementwise.base - INFO - skip broadcast for /slice_2_prod
2026-06-08 22:50:23 - root - DEBUG - add_slice(input=[ELEMENTWISE]-[aten_ops.full.default]-[/full_add]_output_full.default, start=(), shape=(), stride=())
2026-06-08 22:50:23 - root - DEBUG - (Unnamed Layer* 246) [Slice]
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._TRTInterpreter - INFO - Converted node /slice_2 [aten.slice.Tensor] (Inputs: (full: (s79, (((s65 - 1)//8)) + 1, (((s65 - 1)//8)) + 1)@torch.bool, 2, neg: -(((s65 - 1)//8)) - 1@SymInt) | Outputs: (slice_2: (s79, (((s65 - 1)//8)) + 1, (((s65 - 1)//8)) + 1)@torch.bool))
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._TRTInterpreter - DEBUG - Converting node /unsqueeze_21 (kind: aten.unsqueeze.default, args: ('gt_9 <Node>', '1 <int>'))
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._ConverterRegistry - DEBUG - Converter options for aten.unsqueeze.default: 1
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._ConverterRegistry - DEBUG - Selecting converter option 0 for converting aten.unsqueeze.default
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._TRTInterpreter - INFO - Converted node /unsqueeze_21 [aten.unsqueeze.default] (Inputs: (gt_9: (s79, (((s65 - 1)//8)) + 1)@torch.bool, 1) | Outputs: (unsqueeze_21: (s79, 1, (((s65 - 1)//8)) + 1)@torch.bool))
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._TRTInterpreter - DEBUG - Converting node /bitwise_and (kind: aten.bitwise_and.Tensor, args: ('slice_2 <Node>', 'unsqueeze_21 <Node>'))
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._ConverterRegistry - DEBUG - Converter options for aten.bitwise_and.Tensor: 1
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._ConverterRegistry - DEBUG - Selecting converter option 0 for converting aten.bitwise_and.Tensor
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion.impl.elementwise.base - INFO - skip broadcast for /bitwise_and_logical_and
2026-06-08 22:50:23 - torch_tensorrt.dynamo.conversion._TRTInterpreter - INFO - Converted node /bitwise_and [aten.bitwise_and.Tensor] (Inputs: (slice_2: (s79, (((s65 - 1)//8)) + 1, (((s65 - 1)//8)) + 1)@torch.bool, unsqueeze_21: (s79, 1, (((s65 - 1)//8)) + 1)@torch.bool) | Outputs: (bitwise_and: (s79, (((s65 - 1)//8)) + 1, (((s65 - 1)//8)) + 1)@torch.bool))

Describe the solution you'd like

Detect these cases and insert the math to calculate the correct ending dimension

Describe alternatives you've considered

Additional context

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions