Files
x264_sad_benchmark/x264_sum.ll
2025-03-17 20:57:27 +08:00

32 lines
1.0 KiB
LLVM

define dso_local noundef i32 @x264_pixel_sad_16x16(ptr %0, i32 noundef %1, ptr %2, i32 noundef %3) {
%5 = sext i32 %1 to i64
%6 = sext i32 %3 to i64
br label %7
7:
%8 = phi i32 [ 0, %4 ], [ %23, %7 ]
%9 = phi i32 [ 0, %4 ], [ %20, %7 ]
%10 = phi ptr [ %0, %4 ], [ %21, %7 ]
%11 = phi ptr [ %2, %4 ], [ %22, %7 ]
%12 = load <16 x i8>, ptr %10, align 1
%13 = zext <16 x i8> %12 to <16 x i16>
%14 = load <16 x i8>, ptr %11, align 1
%15 = zext <16 x i8> %14 to <16 x i16>
%16 = sub nsw <16 x i16> %13, %15
%17 = tail call <16 x i16> @llvm.abs.v16i16(<16 x i16> %16, i1 false)
%18 = zext <16 x i16> %17 to <16 x i32>
%19 = tail call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %18)
%20 = add i32 %19, %9
%21 = getelementptr inbounds i8, ptr %10, i64 %5
%22 = getelementptr inbounds i8, ptr %11, i64 %6
%23 = add nuw nsw i32 %8, 1
%24 = icmp eq i32 %23, 16
br i1 %24, label %25, label %7
25:
ret i32 %20
}
declare <16 x i16> @llvm.abs.v16i16(<16 x i16>, i1 immarg)
declare i32 @llvm.vector.reduce.add.v16i32(<16 x i32>)