Repository: pytorch
Issue: `torch._inductor.aoti_compile_and_package` fails when using dynamic shapes (PyTorch 2.6.0 RC)
Labels: high priority,triaged,oncall: pt2,module: dynamic shapes,oncall: export,module: aotinductor

### 🐛 Describe the bug

When I try to aot compile a simple example with dynamic shapes, it fails due to invalid generated C++ code.

Example:
```python
import torch


class Model(torch.nn.Module):
    def forward(self, x):
        return x + 1


model = Model().eval()
input = torch.randn(10)

dim = torch.export.Dim("dim_0")
dim_even = 2 * dim

exported_program = torch.export.export(
    model,
    args=(input,),
    dynamic_shapes=({0: dim_even},),
)
torch._inductor.aoti_compile_and_package(exported_program)
```

Error message:
```
/tmp/torchinductor_danielthul/ctokdncd3lqh3uklcegfj2fanld6jbwqtpmk7s2lpcf74fkadoy4/c3tltwsgny45t3ykmpa6l7hab3gk6ekgaylyxcimtihuvyuynwut.cpp: In member function ‘void torch::aot_inductor::AOTInductorModel::run_impl(AtenTensorOpaque**, AtenTensorOpaque**, torch::aot_inductor::DeviceStreamType, AOTIProxyExecutorHandle)’:
/tmp/torchinductor_danielthul/ctokdncd3lqh3uklcegfj2fanld6jbwqtpmk7s2lpcf74fkadoy4/c3tltwsgny45t3ykmpa6l7hab3gk6ekgaylyxcimtihuvyuynwut.cpp:470:39: error: ‘s1’ was not declared in this scope; did you mean ‘y1’?
  470 |     const int64_t int_array_0[] = {2L*s1, };
      |                                       ^~
      |                                       y1
[...]
torch._inductor.exc.CppCompileError: C++ compile error

Command:
g++ /tmp/torchinductor_danielthul/ctokdncd3lqh3uklcegfj2fanld6jbwqtpmk7s2lpcf74fkadoy4/c3tltwsgny45t3ykmpa6l7hab3gk6ekgaylyxcimtihuvyuynwut.cpp -D TORCH_INDUCTOR_CPP_WRAPPER -D STANDALONE_TORCH_HEADER -D C10_USING_CUSTOM_GENERATED_MACROS -D CPU_CAPABILITY_AVX2 -fPIC -O3 -DNDEBUG -fno-trapping-math -funsafe-math-optimizations -ffinite-math-only -fno-signed-zeros -fno-math-errno -fexcess-precision=fast -fno-finite-math-only -fno-unsafe-math-optimizations -ffp-contract=off -fno-tree-loop-vectorize -march=native -Wall -std=c++17 -Wno-unused-variable -Wno-unknown-pragmas -fopenmp -I/home/danielthul/.local/share/uv/python/cpython-3.11.10-linux-x86_64-gnu/include/python3.11 -I/home/danielthul/dev/example-project/.venv/lib/python3.11/site-packages/torch/include -I/home/danielthul/dev/example-project/.venv/lib/python3.11/site-packages/torch/include/torch/csrc/api/include -I/home/danielthul/dev/example-project/.venv/lib/python3.11/site-packages/torch/include/TH -I/home/danielthul/dev/example-project/.venv/lib/python3.11/site-packages/torch/include/THC -mavx2 -mfma -mf16c -D_GLIBCXX_USE_CXX11_ABI=0 -c -o /tmp/torchinductor_danielthul/ctokdncd3lqh3uklcegfj2fanld6jbwqtpmk7s2lpcf74fkadoy4/c3tltwsgny45t3ykmpa6l7hab3gk6ekgaylyxcimtihuvyuynwut.o
```

This is the auto-generated C++ function that fails to compile:
```c++
void AOTInductorModel::run_impl(
    AtenTensorHandle*
        input_handles, // array of input AtenTensorHandle; handles
                        // are stolen; the array itself is borrowed
    AtenTensorHandle*
        output_handles, // array for writing output AtenTensorHandle; handles
                        // will be stolen by the caller; the array itself is
                        // borrowed
    DeviceStreamType stream,
    AOTIProxyExecutorHandle proxy_executor
) {

    auto inputs = steal_from_raw_handles_to_raii_handles(input_handles, 1);
    auto arg0_1 = std::move(inputs[0]);
    inputs.clear();
    auto& kernels = static_cast<AOTInductorModelKernels&>(*this->kernels_.get());
    const int64_t int_array_0[] = {2L*s1, };
    static constexpr int64_t int_array_1[] = {1L, };
    AtenTensorHandle buf0_handle;
    AOTI_TORCH_ERROR_CODE_CHECK(aoti_torch_empty_strided(1, int_array_0, int_array_1, cached_torch_dtype_float32, cached_torch_device_type_cpu, this->device_idx_, &buf0_handle));
    RAIIAtenTensorHandle buf0(buf0_handle);
    cpp_fused_add_0((const float*)(arg0_1.data_ptr()), (float*)(buf0.data_ptr()), s1);
    arg0_1.reset();
    output_handles[0] = buf0.release();
} // AOTInductorModel::run_impl
```

It tries to use the dynamic shape `s1` (which corresponds to `dim` from the Python code), but `s1` is never declared in the C++ code.

I'm using the latest build of PyTorch 2.6 (installed using `uv pip install torch==2.6.0+cu124 --index-url https://download.pytorch.org/whl/test`)

Update: also fails on PyTorch 2.7.0.dev20250123+cu124

### Versions

Collecting environment information...
PyTorch version: 2.6.0+cu124
Is debug build: False
CUDA used to build PyTorch: 12.4
ROCM used to build PyTorch: N/A

OS: Ubuntu 22.04.5 LTS (x86_64)
GCC version: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Clang version: Could not collect
CMake version: version 3.22.1
Libc version: glibc-2.35

Python version: 3.11.10 (main, Oct 16 2024, 04:38:48) [Clang 18.1.8 ] (64-bit runtime)
Python platform: Linux-6.5.0-1024-aws-x86_64-with-glibc2.35
Is CUDA available: True
CUDA runtime version: Could not collect
CUDA_MODULE_LOADING set to: LAZY
GPU models and configuration: GPU 0: NVIDIA L40S
Nvidia driver version: 550.90.07
cuDNN version: Could not collect
HIP runtime version: N/A
MIOpen runtime version: N/A
Is XNNPACK available: True

CPU:
Architecture:                       x86_64
CPU op-mode(s):                     32-bit, 64-bit
Address sizes:                      48 bits physical, 48 bits virtual
Byte Order:                         Little Endian
CPU(s):                             16
On-line CPU(s) list:                0-15
Vendor ID:                          AuthenticAMD
Model name:                         AMD EPYC 7R13 Processor
CPU family:                         25
Model:                              1
Thread(s) per core:                 2
Core(s) per socket:                 8
Socket(s):                          1
Stepping:                           1
BogoMIPS:                           5299.99
Flags:                              fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch topoext invpcid_single ssbd ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr rdpru wbnoinvd arat npt nrip_save vaes vpclmulqdq rdpid
Hypervisor vendor:                  KVM
Virtualization type:                full
L1d cache:                          256 KiB (8 instances)
L1i cache:                          256 KiB (8 instances)
L2 cache:                           4 MiB (8 instances)
L3 cache:                           32 MiB (1 instance)
NUMA node(s):                       1
NUMA node0 CPU(s):                  0-15
Vulnerability Gather data sampling: Not affected
Vulnerability Itlb multihit:        Not affected
Vulnerability L1tf:                 Not affected
Vulnerability Mds:                  Not affected
Vulnerability Meltdown:             Not affected
Vulnerability Mmio stale data:      Not affected
Vulnerability Retbleed:             Not affected
Vulnerability Spec rstack overflow: Vulnerable: Safe RET, no microcode
Vulnerability Spec store bypass:    Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:           Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:           Mitigation; Retpolines; IBPB conditional; IBRS_FW; STIBP always-on; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected
Vulnerability Srbds:                Not affected
Vulnerability Tsx async abort:      Not affected

Versions of relevant libraries:
[pip3] numpy==1.26.4
[pip3] nvidia-cublas-cu12==12.4.5.8
[pip3] nvidia-cuda-cupti-cu12==12.4.127
[pip3] nvidia-cuda-nvrtc-cu12==12.4.127
[pip3] nvidia-cuda-runtime-cu12==12.4.127
[pip3] nvidia-cudnn-cu12==9.1.0.70
[pip3] nvidia-cufft-cu12==11.2.1.3
[pip3] nvidia-curand-cu12==10.3.5.147
[pip3] nvidia-cusolver-cu12==11.6.1.9
[pip3] nvidia-cusparse-cu12==12.3.1.170
[pip3] nvidia-cusparselt-cu12==0.6.2
[pip3] nvidia-nccl-cu12==2.21.5
[pip3] nvidia-nvjitlink-cu12==12.4.127
[pip3] nvidia-nvtx-cu12==12.4.127
[pip3] torch==2.6.0+cu124
[pip3] torch-tb-profiler==0.4.3
[pip3] torchaudio==2.5.1
[pip3] torchvision==0.21.0+cu124
[pip3] triton==3.2.0
[conda] Could not collect

cc @ezyang @gchanan @zou3519 @kadeng @msaroufim @chauhang @penguinwu @bobrenjc93 @avikchaudhuri @gmagogsfm @zhxchen17 @tugsbayasgalan @angelayi @suo @ydwu4 @desertfire @chenyang78