Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
272 changes: 127 additions & 145 deletions bench/miniaudio/optimized/unity.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3077,49 +3077,44 @@ define range(i32 -4, 1) i32 @ma_slot_allocator_alloc(ptr noundef captures(addres
.preheader59: ; preds = %.preheader60, %53
%7 = phi i1 [ true, %.preheader60 ], [ false, %53 ]
%8 = load i32, ptr %5, align 4, !tbaa !60
%9 = lshr i32 %8, 5
%10 = and i32 %8, 31
%.not.i65 = icmp ne i32 %10, 0
%11 = zext i1 %.not.i65 to i32
%12 = or i32 %9, %11
%.not69 = icmp eq i32 %12, 0
br i1 %.not69, label %._crit_edge, label %.preheader58

.preheader58: ; preds = %.preheader59, %44
%indvars.iv = phi i64 [ %indvars.iv.next, %44 ], [ 0, %.preheader59 ]
br label %13
%.not69 = icmp eq i32 %8, 0
br i1 %.not69, label %.thread54, label %13

13: ; preds = %.preheader58, %ma_ffs_32.exit
%14 = load ptr, ptr %0, align 8, !tbaa !58
%15 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %14, i64 %indvars.iv
%16 = load atomic i32, ptr %15 seq_cst, align 4
%17 = icmp eq i32 %16, -1
br i1 %17, label %44, label %.preheader

.preheader: ; preds = %13, %20
%.08.i = phi i32 [ %21, %20 ], [ 0, %13 ]
%18 = shl nuw i32 1, %.08.i
%19 = and i32 %18, %16
%.not.i46.not = icmp eq i32 %19, 0
br i1 %.not.i46.not, label %ma_ffs_32.exit, label %20

20: ; preds = %.preheader
%21 = add nuw nsw i32 %.08.i, 1
%exitcond.not.i = icmp eq i32 %21, 32
13: ; preds = %.preheader59, %40
%indvars.iv = phi i64 [ %indvars.iv.next, %40 ], [ 0, %.preheader59 ]
br label %9

9:; preds = %13, %ma_ffs_32.exit
%10 = load ptr, ptr %0, align 8, !tbaa !58
%11 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %10, i64 %indvars.iv
%12 = load atomic i32, ptr %11 seq_cst, align 4
%13 = icmp eq i32 %12, -1
br i1 %13, label %40, label %.preheader

.preheader:; preds = %9, %16
%.08.i = phi i32 [ %17, %16 ], [ 0, %9 ]
%14 = shl nuw i32 1, %.08.i
%15 = and i32 %14, %12
%.not.i46.not = icmp eq i32 %15, 0
br i1 %.not.i46.not, label %ma_ffs_32.exit, label %16

16: ; preds = %.preheader
%17 = add nuw nsw i32 %.08.i, 1
%exitcond.not.i = icmp eq i32 %17, 32
br i1 %exitcond.not.i, label %.ma_ffs_32.exit_crit_edge, label %.preheader, !llvm.loop !62

.ma_ffs_32.exit_crit_edge: ; preds = %20
.ma_ffs_32.exit_crit_edge: ; preds = %16
br label %ma_ffs_32.exit, !llvm.loop !62

ma_ffs_32.exit: ; preds = %.preheader, %.ma_ffs_32.exit_crit_edge
%.0.lcssa.i = phi i32 [ 32, %.ma_ffs_32.exit_crit_edge ], [ %.08.i, %.preheader ]
%22 = shl nuw i32 1, %.0.lcssa.i
%23 = or i32 %22, %16
%23 = or i32 %22, %12
%24 = load ptr, ptr %0, align 8, !tbaa !58
%25 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %24, i64 %indvars.iv
%26 = cmpxchg volatile ptr %25, i32 %16, i32 %23 seq_cst seq_cst, align 4
%26 = cmpxchg volatile ptr %25, i32 %12, i32 %23 seq_cst seq_cst, align 4
%27 = extractvalue { i32, i1 } %26, 1
br i1 %27, label %28, label %13
br i1 %27, label %28, label %9

28: ; preds = %ma_ffs_32.exit
%29 = trunc nuw nsw i64 %indvars.iv to i32
Expand All @@ -3144,7 +3139,7 @@ ma_ffs_32.exit: ; preds = %.preheader, %.ma_ff
store i64 %43, ptr %1, align 8, !tbaa !63
br label %.thread54

44: ; preds = %13
44: ; preds = %9
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
%45 = load i32, ptr %5, align 4, !tbaa !60
%46 = lshr i32 %45, 5
Expand All @@ -3156,18 +3151,17 @@ ma_ffs_32.exit: ; preds = %.preheader, %.ma_ff
%50 = icmp samesign ult i64 %indvars.iv.next, %49
br i1 %50, label %.preheader58, label %._crit_edge, !llvm.loop !65

._crit_edge: ; preds = %44, %.preheader59
%.lcssa = phi i32 [ %8, %.preheader59 ], [ %45, %44 ]
%51 = load i32, ptr %6, align 8, !tbaa !66
%52 = icmp ult i32 %51, %.lcssa
br i1 %52, label %53, label %.thread54
._crit_edge: ; preds = %44
%47 = load i32, ptr %6, align 8, !tbaa !66
%52 = icmp ult i32 %47, %41
br i1 %52, label %49, label %.thread54

53: ; preds = %._crit_edge
49: ; preds = %._crit_edge
tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #66, !srcloc !39
br i1 %7, label %.preheader59, label %.thread54, !llvm.loop !67

.thread54: ; preds = %._crit_edge, %53, %34, %28, %2
%.0 = phi i32 [ -2, %2 ], [ -4, %28 ], [ 0, %34 ], [ -4, %53 ], [ -4, %._crit_edge ]
.thread54: ; preds = %.preheader59, %._crit_edge, %53, %34, %28, %2
%.0 = phi i32 [ -2, %2 ], [ -4, %28 ], [ 0, %30 ], [ -4, %53 ], [ -4, %._crit_edge ], [ -4, %.preheader59 ]
ret i32 %.0
}

Expand Down Expand Up @@ -3422,38 +3416,33 @@ ma_semaphore_init.exit: ; preds = %56, %59, %52, %33
%62 = getelementptr inbounds nuw i8, ptr %2, i64 136
br label %.preheader59.i

.preheader59.i: ; preds = %108, %ma_semaphore_init.exit
%63 = phi i1 [ true, %ma_semaphore_init.exit ], [ false, %108 ]
.preheader59.i: ; preds = %104, %ma_semaphore_init.exit
%63 = phi i1 [ true, %ma_semaphore_init.exit ], [ false, %104 ]
%64 = load i32, ptr %48, align 4, !tbaa !60
%65 = lshr i32 %64, 5
%66 = and i32 %64, 31
%.not.i65.i = icmp ne i32 %66, 0
%67 = zext i1 %.not.i65.i to i32
%68 = or i32 %65, %67
%.not69.i = icmp eq i32 %68, 0
br i1 %.not69.i, label %._crit_edge.i, label %.preheader58.i

.preheader58.i: ; preds = %.preheader59.i, %99
%indvars.iv.i = phi i64 [ %indvars.iv.next.i, %99 ], [ 0, %.preheader59.i ]
br label %69
%.not69.i = icmp eq i32 %64, 0
br i1 %.not69.i, label %ma_slot_allocator_alloc.exit, label %15

69: ; preds = %.preheader59.i, %95
%indvars.iv.i = phi i64 [ %indvars.iv.next.i, %95 ], [ 0, %.preheader59.i ]
br label %65

69: ; preds = %ma_ffs_32.exit.i, %.preheader58.i
65:; preds = %ma_ffs_32.exit.i, %15
%70 = load ptr, ptr %31, align 8, !tbaa !58
%71 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %70, i64 %indvars.iv.i
%72 = load atomic i32, ptr %71 seq_cst, align 4
%73 = icmp eq i32 %72, -1
br i1 %73, label %99, label %.preheader.i

.preheader.i: ; preds = %69, %76
%.08.i.i = phi i32 [ %77, %76 ], [ 0, %69 ]
%74 = shl nuw i32 1, %.08.i.i
%75 = and i32 %74, %72
%.not.i46.not.i = icmp eq i32 %75, 0
br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %76

76: ; preds = %.preheader.i
%77 = add nuw nsw i32 %.08.i.i, 1
%exitcond.not.i.i = icmp eq i32 %77, 32
%67 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %66, i64 %indvars.iv.i
%68 = load atomic i32, ptr %67 seq_cst, align 4
%73 = icmp eq i32 %76, -1
br i1 %69, label %95, label %.preheader.i

.preheader.i:; preds = %65, %72
%.08.i.i = phi i32 [ %73, %72 ], [ 0, %65 ]
%70 = shl nuw i32 1, %.08.i.i
%71 = and i32 %70, %68
%.not.i46.not.i = icmp eq i32 %71, 0
br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %72

72: ; preds = %.preheader.i
%73 = add nuw nsw i32 %.08.i.i, 1
%exitcond.not.i.i = icmp eq i32 %73, 32
br i1 %exitcond.not.i.i, label %.ma_ffs_32.exit_crit_edge.i, label %.preheader.i, !llvm.loop !62

.ma_ffs_32.exit_crit_edge.i: ; preds = %76
Expand Down Expand Up @@ -3503,17 +3492,16 @@ ma_ffs_32.exit.i: ; preds = %.preheader.i, %.ma_
%105 = icmp samesign ult i64 %indvars.iv.next.i, %104
br i1 %105, label %.preheader58.i, label %._crit_edge.i, !llvm.loop !65

._crit_edge.i: ; preds = %99, %.preheader59.i
%.lcssa.i = phi i32 [ %64, %.preheader59.i ], [ %100, %99 ]
%106 = load i32, ptr %62, align 8, !tbaa !66
%107 = icmp ult i32 %106, %.lcssa.i
br i1 %107, label %108, label %ma_slot_allocator_alloc.exit
._crit_edge.i: ; preds = %95
%102 = load i32, ptr %62, align 8, !tbaa !66
%103 = icmp ult i32 %102, %96
br i1 %103, label %104, label %ma_slot_allocator_alloc.exit

108: ; preds = %._crit_edge.i
104: ; preds = %._crit_edge.i
tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #66, !srcloc !39
br i1 %63, label %.preheader59.i, label %ma_slot_allocator_alloc.exit, !llvm.loop !67

ma_slot_allocator_alloc.exit: ; preds = %._crit_edge.i, %108, %84, %90
ma_slot_allocator_alloc.exit: ; preds = %.preheader59.i, %._crit_edge.i, %104, %84, %90
%109 = load ptr, ptr %30, align 8, !tbaa !79
%110 = load i64, ptr %61, align 8, !tbaa !80
%111 = and i64 %110, 65535
Expand Down Expand Up @@ -3712,35 +3700,30 @@ define range(i32 -4, 1) i32 @ma_job_queue_post(ptr noundef %0, ptr noundef reado
.preheader59.i: ; preds = %45, %5
%9 = phi i1 [ true, %5 ], [ false, %45 ]
%10 = load i32, ptr %7, align 4, !tbaa !60
%11 = lshr i32 %10, 5
%12 = and i32 %10, 31
%.not.i65.i = icmp ne i32 %12, 0
%13 = zext i1 %.not.i65.i to i32
%14 = or i32 %11, %13
%.not69.i = icmp eq i32 %14, 0
br i1 %.not69.i, label %._crit_edge.i, label %.preheader58.i

.preheader58.i: ; preds = %.preheader59.i, %36
%indvars.iv.i = phi i64 [ %indvars.iv.next.i, %36 ], [ 0, %.preheader59.i ]
br label %15
%.not69.i = icmp eq i32 %10, 0
br i1 %.not69.i, label %ma_slot_allocator_alloc.exit.thread, label %73

15: ; preds = %ma_ffs_32.exit.i, %.preheader58.i
%16 = load ptr, ptr %6, align 8, !tbaa !58
%17 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %16, i64 %indvars.iv.i
%18 = load atomic i32, ptr %17 seq_cst, align 4
%19 = icmp eq i32 %18, -1
br i1 %19, label %36, label %.preheader.i

.preheader.i: ; preds = %15, %22
%.08.i.i = phi i32 [ %23, %22 ], [ 0, %15 ]
%20 = shl nuw i32 1, %.08.i.i
%21 = and i32 %20, %18
%.not.i46.not.i = icmp eq i32 %21, 0
15: ; preds = %.preheader59.i, %32
%indvars.iv.i = phi i64 [ %indvars.iv.next.i, %32 ], [ 0, %.preheader59.i ]
br label %11

11:; preds = %ma_ffs_32.exit.i, %15
%12 = load ptr, ptr %6, align 8, !tbaa !58
%13 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %12, i64 %indvars.iv.i
%14 = load atomic i32, ptr %13 seq_cst, align 4
%15 = icmp eq i32 %14, -1
br i1 %15, label %32, label %.preheader.i

.preheader.i:; preds = %11, %18
%.08.i.i = phi i32 [ %19, %22 ], [ 0, %11 ]
%16 = shl nuw i32 1, %.08.i.i
%17 = and i32 %16, %14
%.not.i46.not.i = icmp eq i32 %17, 0
br i1 %.not.i46.not.i, label %ma_ffs_32.exit.i, label %22

22: ; preds = %.preheader.i
%23 = add nuw nsw i32 %.08.i.i, 1
%exitcond.not.i.i = icmp eq i32 %23, 32
18: ; preds = %.preheader.i
%19 = add nuw nsw i32 %.08.i.i, 1
%exitcond.not.i.i = icmp eq i32 %19, 32
br i1 %exitcond.not.i.i, label %.ma_ffs_32.exit_crit_edge.i, label %.preheader.i, !llvm.loop !62

.ma_ffs_32.exit_crit_edge.i: ; preds = %22
Expand All @@ -3749,23 +3732,23 @@ define range(i32 -4, 1) i32 @ma_job_queue_post(ptr noundef %0, ptr noundef reado
ma_ffs_32.exit.i: ; preds = %.preheader.i, %.ma_ffs_32.exit_crit_edge.i
%.0.lcssa.i.i = phi i32 [ 32, %.ma_ffs_32.exit_crit_edge.i ], [ %.08.i.i, %.preheader.i ]
%24 = shl nuw i32 1, %.0.lcssa.i.i
%25 = or i32 %24, %18
%25 = or i32 %24, %14
%26 = load ptr, ptr %6, align 8, !tbaa !58
%27 = getelementptr inbounds nuw %struct.ma_slot_allocator_group, ptr %26, i64 %indvars.iv.i
%28 = cmpxchg volatile ptr %27, i32 %18, i32 %25 seq_cst seq_cst, align 4
%28 = cmpxchg volatile ptr %27, i32 %14, i32 %25 seq_cst seq_cst, align 4
%29 = extractvalue { i32, i1 } %28, 1
br i1 %29, label %30, label %15
br i1 %29, label %30, label %11

30: ; preds = %ma_ffs_32.exit.i
%31 = trunc nuw nsw i64 %indvars.iv.i to i32
%32 = atomicrmw add ptr %8, i32 1 seq_cst, align 8
%33 = shl i32 %31, 5
%34 = add i32 %.0.lcssa.i.i, %33
%35 = load i32, ptr %7, align 4, !tbaa !60
%.not.i = icmp ult i32 %34, %35
br i1 %.not.i, label %46, label %ma_slot_allocator_alloc.exit.thread
36: ; preds = %ma_ffs_32.exit.i
%27 = trunc nuw nsw i64 %indvars.iv.i to i32
%28 = atomicrmw add ptr %8, i32 1 seq_cst, align 8
%29 = shl i32 %27, 5
%30 = add i32 %.0.lcssa.i.i, %29
%31 = load i32, ptr %7, align 4, !tbaa !60
%.not.i = icmp ult i32 %30, %31
br i1 %.not.i, label %42, label %ma_slot_allocator_alloc.exit.thread

36: ; preds = %15
32: ; preds = %11
%indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1
%37 = load i32, ptr %7, align 4, !tbaa !60
%38 = lshr i32 %37, 5
Expand All @@ -3777,20 +3760,19 @@ ma_ffs_32.exit.i: ; preds = %.preheader.i, %.ma_
%42 = icmp samesign ult i64 %indvars.iv.next.i, %41
br i1 %42, label %.preheader58.i, label %._crit_edge.i, !llvm.loop !65

._crit_edge.i: ; preds = %36, %.preheader59.i
%.lcssa.i = phi i32 [ %10, %.preheader59.i ], [ %37, %36 ]
%43 = load i32, ptr %8, align 8, !tbaa !66
%44 = icmp ult i32 %43, %.lcssa.i
br i1 %44, label %45, label %ma_slot_allocator_alloc.exit.thread
._crit_edge.i: ; preds = %36
%39 = load i32, ptr %8, align 8, !tbaa !66
%40 = icmp ult i32 %39, %33
br i1 %40, label %41, label %ma_slot_allocator_alloc.exit.thread

45: ; preds = %._crit_edge.i
41: ; preds = %._crit_edge.i
tail call void asm sideeffect "pause", "~{dirflag},~{fpsr},~{flags}"() #66, !srcloc !39
br i1 %9, label %.preheader59.i, label %ma_slot_allocator_alloc.exit.thread, !llvm.loop !67

46: ; preds = %30
%47 = getelementptr inbounds nuw i8, ptr %0, i64 128
%48 = load ptr, ptr %47, align 8, !tbaa !59
%49 = zext i32 %34 to i64
%49 = zext i32 %30 to i64
%50 = getelementptr inbounds nuw i32, ptr %48, i64 %49
%51 = load i32, ptr %50, align 4, !tbaa !3
%52 = add i32 %51, 1
Expand Down Expand Up @@ -3876,31 +3858,31 @@ ma_spinlock_lock.exit: ; preds = %.loopexit.i, %46
.backedge: ; preds = %97, %91, %78
br label %78

102: ; preds = %91
%103 = and i64 %79, -4294967296
%104 = add i64 %103, 4294967296
%105 = or disjoint i64 %104, %49
%106 = cmpxchg volatile ptr %77, i64 %79, i64 %105 seq_cst seq_cst, align 8
store atomic volatile i32 0, ptr %68 release, align 4
%107 = load i32, ptr %0, align 8, !tbaa !77
%108 = and i32 %107, 1
%109 = icmp eq i32 %108, 0
br i1 %109, label %110, label %ma_slot_allocator_alloc.exit.thread

110: ; preds = %102
%111 = getelementptr inbounds nuw i8, ptr %0, i64 24
%112 = getelementptr inbounds nuw i8, ptr %0, i64 32
%113 = tail call i32 @pthread_mutex_lock(ptr noundef nonnull %112) #66
%114 = load i32, ptr %111, align 8, !tbaa !41
%115 = add nsw i32 %114, 1
store i32 %115, ptr %111, align 8, !tbaa !41
%116 = getelementptr inbounds nuw i8, ptr %0, i64 72
%117 = tail call i32 @pthread_cond_signal(ptr noundef nonnull %116) #66
%118 = tail call i32 @pthread_mutex_unlock(ptr noundef nonnull %112) #66
110: ; preds = %91
%103 = and i64 %75, -4294967296
%100 = add i64 %103, 4294967296
%101 = or disjoint i64 %100, %45
%102 = cmpxchg volatile ptr %73, i64 %75, i64 %101 seq_cst seq_cst, align 8
store atomic volatile i32 0, ptr %64 release, align 4
%103 = load i32, ptr %0, align 8, !tbaa !77
%104 = and i32 %103, 1
%105 = icmp eq i32 %104, 0
br i1 %105, label %110, label %ma_slot_allocator_alloc.exit.thread

106: ; preds = %98
%107 = getelementptr inbounds nuw i8, ptr %0, i64 24
%108 = getelementptr inbounds nuw i8, ptr %0, i64 32
%109 = tail call i32 @pthread_mutex_lock(ptr noundef nonnull %108) #66
%110 = load i32, ptr %107, align 8, !tbaa !41
%111 = add nsw i32 %110, 1
store i32 %111, ptr %107, align 8, !tbaa !41
%112 = getelementptr inbounds nuw i8, ptr %0, i64 72
%113 = tail call i32 @pthread_cond_signal(ptr noundef nonnull %112) #66
%114 = tail call i32 @pthread_mutex_unlock(ptr noundef nonnull %108) #66
br label %ma_slot_allocator_alloc.exit.thread

ma_slot_allocator_alloc.exit.thread: ; preds = %._crit_edge.i, %45, %30, %102, %110, %2
%.0 = phi i32 [ -2, %2 ], [ 0, %110 ], [ 0, %102 ], [ -4, %30 ], [ -4, %45 ], [ -4, %._crit_edge.i ]
ma_slot_allocator_alloc.exit.thread: ; preds = %.preheader59.i, %._crit_edge.i, %45, %30, %102, %110, %2
%.0 = phi i32 [ -2, %2 ], [ 0, %110 ], [ 0, %102 ], [ -4, %30 ], [ -4, %45 ], [ -4, %._crit_edge.i ], [ -4, %.preheader59.i ]
ret i32 %.0
}

Expand Down
Loading