• Hello everyone, I am using LLVM 16 to optimize my code, but I don’t find a sequence of passes to simplify this code. • target datalayout = “e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128” target triple = “i386-unknown-linux-gnu” define void @top_fun(i32* %0, i32* %1, i32* %2) { br label %4 4: ; preds = %15, %3 %5 = phi i32 [ 0, %3 ], [ %20, %15 ] %6 = lshr i32 %5, 3 %7 = and i32 %5, 7 switch i32 %6, label %23 [ i32 0, label %8 i32 1, label %25 ] 8: ; preds = %4, %25 %9 = phi i32* [ %1, %25 ], [ %0, %4 ] %10 = getelementptr i32, i32* %9, i32 %7 %11 = load i32, i32* %10, align 4, !tbaa !6 %12 = getelementptr i32, i32* %2, i32 %5 store i32 %11, i32* %12, align 4, !tbaa !6 %13 = add nuw nsw i32 %5, 8 %14 = lshr i32 %13, 3 switch i32 %14, label %23 [ i32 0, label %15 i32 1, label %24 ] 15: ; preds = %8, %24 %16 = phi i32* [ %1, %24 ], [ %0, %8 ] %17 = getelementptr i32, i32* %16, i32 %7 %18 = load i32, i32* %17, align 4, !tbaa !6 %19 = getelementptr i32, i32* %2, i32 %13 store i32 %18, i32* %19, align 4, !tbaa !6 %20 = add nuw nsw i32 %5, 1 %21 = icmp eq i32 %20, 8 br i1 %21, label %22, label %4, !llvm.loop !10 22: ; preds = %15 ret void 23: ; preds = %8, %4 unreachable 24: ; preds = %8 br label %15 25: ; preds = %4 br label %8 } !llvm.module.flags = !{!0, !1, !2, !3, !4} !llvm.ident = !{!5} !0 = !{i32 1, !“NumRegisterParameters”, i32 0} !1 = !{i32 1, !“wchar_size”, i32 4} !2 = !{i32 8, !“PIC Level”, i32 2} !3 = !{i32 7, !“PIE Level”, i32 2} !4 = !{i32

Hello everyone, I am using LLVM 16 to optimize my code, but I don’t find a sequence of passes to simplify this code. • target datalayout = “e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128” target triple = “i386-unknown-linux-gnu” define void @top_fun(i32* %0, i32* %1, i32* %2) { br label %4 4: ; preds = %15, %3 %5 = phi i32 [ 0, %3 ], [ %20, %15 ] %6 = lshr i32 %5, 3 %7 = and i32 %5, 7 switch i32 %6, label %23 [ i32 0, label %8 i32 1, label %25 ] 8: ; preds = %4, %2

Article Summaries:

  • Hello everyone, I am using LLVM 16 to optimize my code, but I don’t find a sequence of passes to simplify this code. target datalayout = “e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128” target triple = “i386-unknown-linux-gnu” define void @top_fun(i32* %0, i32* %1, i32* %2) { br label %4 4: ; preds = %15, %3 %5 = phi i32 [ 0, %3 ], [ %20, %15 ] %6 = lshr i32 %5, 3 %7 = and i32 %5, 7 switch i32 %6, label %23 [ i32 0, label %8 i32 1, label %25 ] 8: ; preds = %4, %25 %9 = phi i32* [ %1, %25 ], [ %0, %4 ] %10 = getelementptr i32, i32* %9, i32 %7 %11 = load i32, i32*

Sources: