[llvm] [InstCombine] Extend folding of aggregate construction to cases when source aggregates are partially available (PR #100828)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 30 12:53:52 PDT 2024


weiguozhi wrote:

> This patch causes InstCombine to hang when building https://github.com/jqlang/jq:
> 
> ```
> ; timeout 5s bin/opt -passes=instcombine reduced.ll -S
> define { i64, ptr } @minmax_by({ i64, ptr } %0, i1 %1, i1 %2, { i64, ptr } %3) {
>   %5 = extractvalue { i64, ptr } %0, 0
>   %6 = extractvalue { i64, ptr } %0, 1
>   br label %7
> 
> 7:                                                ; preds = %14, %4
>   %.sroa.01.0 = phi i64 [ %5, %4 ], [ %.sroa.01.1, %14 ]
>   %.sroa.3.0 = phi ptr [ %6, %4 ], [ %.sroa.3.1, %14 ]
>   br i1 %1, label %8, label %15
> 
> 8:                                                ; preds = %7
>   br i1 %2, label %9, label %12
> 
> 9:                                                ; preds = %8
>   %10 = extractvalue { i64, ptr } %3, 0
>   %11 = extractvalue { i64, ptr } %3, 1
>   br label %14
> 
> 12:                                               ; preds = %8
>   %13 = getelementptr { i64, ptr }, ptr null, i32 0, i32 0
>   br label %14
> 
> 14:                                               ; preds = %12, %9
>   %.sroa.01.1 = phi i64 [ %10, %9 ], [ %.sroa.01.0, %12 ]
>   %.sroa.3.1 = phi ptr [ %11, %9 ], [ %.sroa.3.0, %12 ]
>   br label %7
> 
> 15:                                               ; preds = %7
>   %.fca.0.insert = insertvalue { i64, ptr } zeroinitializer, i64 %.sroa.01.0, 0
>   %.fca.1.insert = insertvalue { i64, ptr } %.fca.0.insert, ptr %.sroa.3.0, 1
>   ret { i64, ptr } %.fca.1.insert
> }
> ```



https://github.com/llvm/llvm-project/pull/100828


More information about the llvm-commits mailing list