Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; ModuleID = 'add_u8S'
- target triple = "x86_64-apple-darwin12.5.0"
- %likely_matrix = type { i8*, i32, i32, i32, i32, i32, %likely_matrix_private* }
- %likely_matrix_private = type opaque
- ; Function Attrs: nounwind
- define noalias %likely_matrix* @add_u8S(%likely_matrix* noalias nocapture %srcA) #0 {
- entry:
- %0 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 1
- %kernel_type = load i32* %0
- %1 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 2
- %kernel_channels = load i32* %1
- %2 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 3
- %kernel_columns = load i32* %2
- %3 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 4
- %kernel_rows = load i32* %3
- %4 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 5
- %kernel_frames = load i32* %4
- %5 = call %likely_matrix* @likely_new(i32 %kernel_type, i32 %kernel_channels, i32 %kernel_columns, i32 %kernel_rows, i32 %kernel_frames, i8* null, i8 0)
- %6 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 2
- %kernel_channels1 = load i32* %6
- %7 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 3
- %kernel_columns2 = load i32* %7
- %8 = mul i32 %kernel_channels1, %kernel_columns2
- %9 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 4
- %kernel_rows3 = load i32* %9
- %10 = mul i32 %8, %kernel_rows3
- %11 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 5
- %kernel_frames4 = load i32* %11
- %12 = mul i32 %10, %kernel_frames4
- %13 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 0
- %kernel_data = load i8** %13
- %14 = getelementptr inbounds %likely_matrix* %5, i32 0, i32 0
- %kernel_data8 = load i8** %14
- %15 = mul i32 %kernel_channels1, %kernel_columns2
- %16 = mul i32 %15, %kernel_rows3
- %17 = mul i32 %16, %kernel_frames4
- %end.idx = add i32 %17, 0
- %n.mod.vf = urem i32 %17, 32
- %n.vec = sub i32 %17, %n.mod.vf
- %end.idx.rnd.down = add i32 %n.vec, 0
- %cmp.zero = icmp eq i32 %end.idx.rnd.down, 0
- br i1 %cmp.zero, label %middle.block, label %vector.ph
- vector.ph: ; preds = %entry
- %broadcast.splatinsert9 = insertelement <32 x i32> undef, i32 %12, i32 0
- %broadcast.splat10 = shufflevector <32 x i32> %broadcast.splatinsert9, <32 x i32> undef, <32 x i32> zeroinitializer
- br label %vector.body
- vector.body: ; preds = %vector.body, %vector.ph
- %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]
- %broadcast.splatinsert = insertelement <32 x i32> undef, i32 %index, i32 0
- %broadcast.splat = shufflevector <32 x i32> %broadcast.splatinsert, <32 x i32> undef, <32 x i32> zeroinitializer
- %induction = add <32 x i32> %broadcast.splat, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
- %18 = extractelement <32 x i32> %induction, i32 0
- %19 = getelementptr i8* %kernel_data, i32 %18
- %20 = insertelement <32 x i8*> undef, i8* %19, i32 0
- %21 = extractelement <32 x i32> %induction, i32 1
- %22 = getelementptr i8* %kernel_data, i32 %21
- %23 = insertelement <32 x i8*> %20, i8* %22, i32 1
- %24 = extractelement <32 x i32> %induction, i32 2
- %25 = getelementptr i8* %kernel_data, i32 %24
- %26 = insertelement <32 x i8*> %23, i8* %25, i32 2
- %27 = extractelement <32 x i32> %induction, i32 3
- %28 = getelementptr i8* %kernel_data, i32 %27
- %29 = insertelement <32 x i8*> %26, i8* %28, i32 3
- %30 = extractelement <32 x i32> %induction, i32 4
- %31 = getelementptr i8* %kernel_data, i32 %30
- %32 = insertelement <32 x i8*> %29, i8* %31, i32 4
- %33 = extractelement <32 x i32> %induction, i32 5
- %34 = getelementptr i8* %kernel_data, i32 %33
- %35 = insertelement <32 x i8*> %32, i8* %34, i32 5
- %36 = extractelement <32 x i32> %induction, i32 6
- %37 = getelementptr i8* %kernel_data, i32 %36
- %38 = insertelement <32 x i8*> %35, i8* %37, i32 6
- %39 = extractelement <32 x i32> %induction, i32 7
- %40 = getelementptr i8* %kernel_data, i32 %39
- %41 = insertelement <32 x i8*> %38, i8* %40, i32 7
- %42 = extractelement <32 x i32> %induction, i32 8
- %43 = getelementptr i8* %kernel_data, i32 %42
- %44 = insertelement <32 x i8*> %41, i8* %43, i32 8
- %45 = extractelement <32 x i32> %induction, i32 9
- %46 = getelementptr i8* %kernel_data, i32 %45
- %47 = insertelement <32 x i8*> %44, i8* %46, i32 9
- %48 = extractelement <32 x i32> %induction, i32 10
- %49 = getelementptr i8* %kernel_data, i32 %48
- %50 = insertelement <32 x i8*> %47, i8* %49, i32 10
- %51 = extractelement <32 x i32> %induction, i32 11
- %52 = getelementptr i8* %kernel_data, i32 %51
- %53 = insertelement <32 x i8*> %50, i8* %52, i32 11
- %54 = extractelement <32 x i32> %induction, i32 12
- %55 = getelementptr i8* %kernel_data, i32 %54
- %56 = insertelement <32 x i8*> %53, i8* %55, i32 12
- %57 = extractelement <32 x i32> %induction, i32 13
- %58 = getelementptr i8* %kernel_data, i32 %57
- %59 = insertelement <32 x i8*> %56, i8* %58, i32 13
- %60 = extractelement <32 x i32> %induction, i32 14
- %61 = getelementptr i8* %kernel_data, i32 %60
- %62 = insertelement <32 x i8*> %59, i8* %61, i32 14
- %63 = extractelement <32 x i32> %induction, i32 15
- %64 = getelementptr i8* %kernel_data, i32 %63
- %65 = insertelement <32 x i8*> %62, i8* %64, i32 15
- %66 = extractelement <32 x i32> %induction, i32 16
- %67 = getelementptr i8* %kernel_data, i32 %66
- %68 = insertelement <32 x i8*> %65, i8* %67, i32 16
- %69 = extractelement <32 x i32> %induction, i32 17
- %70 = getelementptr i8* %kernel_data, i32 %69
- %71 = insertelement <32 x i8*> %68, i8* %70, i32 17
- %72 = extractelement <32 x i32> %induction, i32 18
- %73 = getelementptr i8* %kernel_data, i32 %72
- %74 = insertelement <32 x i8*> %71, i8* %73, i32 18
- %75 = extractelement <32 x i32> %induction, i32 19
- %76 = getelementptr i8* %kernel_data, i32 %75
- %77 = insertelement <32 x i8*> %74, i8* %76, i32 19
- %78 = extractelement <32 x i32> %induction, i32 20
- %79 = getelementptr i8* %kernel_data, i32 %78
- %80 = insertelement <32 x i8*> %77, i8* %79, i32 20
- %81 = extractelement <32 x i32> %induction, i32 21
- %82 = getelementptr i8* %kernel_data, i32 %81
- %83 = insertelement <32 x i8*> %80, i8* %82, i32 21
- %84 = extractelement <32 x i32> %induction, i32 22
- %85 = getelementptr i8* %kernel_data, i32 %84
- %86 = insertelement <32 x i8*> %83, i8* %85, i32 22
- %87 = extractelement <32 x i32> %induction, i32 23
- %88 = getelementptr i8* %kernel_data, i32 %87
- %89 = insertelement <32 x i8*> %86, i8* %88, i32 23
- %90 = extractelement <32 x i32> %induction, i32 24
- %91 = getelementptr i8* %kernel_data, i32 %90
- %92 = insertelement <32 x i8*> %89, i8* %91, i32 24
- %93 = extractelement <32 x i32> %induction, i32 25
- %94 = getelementptr i8* %kernel_data, i32 %93
- %95 = insertelement <32 x i8*> %92, i8* %94, i32 25
- %96 = extractelement <32 x i32> %induction, i32 26
- %97 = getelementptr i8* %kernel_data, i32 %96
- %98 = insertelement <32 x i8*> %95, i8* %97, i32 26
- %99 = extractelement <32 x i32> %induction, i32 27
- %100 = getelementptr i8* %kernel_data, i32 %99
- %101 = insertelement <32 x i8*> %98, i8* %100, i32 27
- %102 = extractelement <32 x i32> %induction, i32 28
- %103 = getelementptr i8* %kernel_data, i32 %102
- %104 = insertelement <32 x i8*> %101, i8* %103, i32 28
- %105 = extractelement <32 x i32> %induction, i32 29
- %106 = getelementptr i8* %kernel_data, i32 %105
- %107 = insertelement <32 x i8*> %104, i8* %106, i32 29
- %108 = extractelement <32 x i32> %induction, i32 30
- %109 = getelementptr i8* %kernel_data, i32 %108
- %110 = insertelement <32 x i8*> %107, i8* %109, i32 30
- %111 = extractelement <32 x i32> %induction, i32 31
- %112 = getelementptr i8* %kernel_data, i32 %111
- %113 = insertelement <32 x i8*> %110, i8* %112, i32 31
- %114 = getelementptr i8* %19, i32 0
- %115 = bitcast i8* %114 to <32 x i8>*
- %wide.load = load <32 x i8>* %115
- %116 = add <32 x i8> %wide.load, <i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32>
- %117 = icmp ult <32 x i8> %116, %wide.load
- %118 = zext <32 x i1> %117 to <32 x i8>
- %119 = sub <32 x i8> zeroinitializer, %118
- %120 = or <32 x i8> %116, %119
- %121 = getelementptr i8* %kernel_data8, i32 %18
- %122 = insertelement <32 x i8*> undef, i8* %121, i32 0
- %123 = getelementptr i8* %kernel_data8, i32 %21
- %124 = insertelement <32 x i8*> %122, i8* %123, i32 1
- %125 = getelementptr i8* %kernel_data8, i32 %24
- %126 = insertelement <32 x i8*> %124, i8* %125, i32 2
- %127 = getelementptr i8* %kernel_data8, i32 %27
- %128 = insertelement <32 x i8*> %126, i8* %127, i32 3
- %129 = getelementptr i8* %kernel_data8, i32 %30
- %130 = insertelement <32 x i8*> %128, i8* %129, i32 4
- %131 = getelementptr i8* %kernel_data8, i32 %33
- %132 = insertelement <32 x i8*> %130, i8* %131, i32 5
- %133 = getelementptr i8* %kernel_data8, i32 %36
- %134 = insertelement <32 x i8*> %132, i8* %133, i32 6
- %135 = getelementptr i8* %kernel_data8, i32 %39
- %136 = insertelement <32 x i8*> %134, i8* %135, i32 7
- %137 = getelementptr i8* %kernel_data8, i32 %42
- %138 = insertelement <32 x i8*> %136, i8* %137, i32 8
- %139 = getelementptr i8* %kernel_data8, i32 %45
- %140 = insertelement <32 x i8*> %138, i8* %139, i32 9
- %141 = getelementptr i8* %kernel_data8, i32 %48
- %142 = insertelement <32 x i8*> %140, i8* %141, i32 10
- %143 = getelementptr i8* %kernel_data8, i32 %51
- %144 = insertelement <32 x i8*> %142, i8* %143, i32 11
- %145 = getelementptr i8* %kernel_data8, i32 %54
- %146 = insertelement <32 x i8*> %144, i8* %145, i32 12
- %147 = getelementptr i8* %kernel_data8, i32 %57
- %148 = insertelement <32 x i8*> %146, i8* %147, i32 13
- %149 = getelementptr i8* %kernel_data8, i32 %60
- %150 = insertelement <32 x i8*> %148, i8* %149, i32 14
- %151 = getelementptr i8* %kernel_data8, i32 %63
- %152 = insertelement <32 x i8*> %150, i8* %151, i32 15
- %153 = getelementptr i8* %kernel_data8, i32 %66
- %154 = insertelement <32 x i8*> %152, i8* %153, i32 16
- %155 = getelementptr i8* %kernel_data8, i32 %69
- %156 = insertelement <32 x i8*> %154, i8* %155, i32 17
- %157 = getelementptr i8* %kernel_data8, i32 %72
- %158 = insertelement <32 x i8*> %156, i8* %157, i32 18
- %159 = getelementptr i8* %kernel_data8, i32 %75
- %160 = insertelement <32 x i8*> %158, i8* %159, i32 19
- %161 = getelementptr i8* %kernel_data8, i32 %78
- %162 = insertelement <32 x i8*> %160, i8* %161, i32 20
- %163 = getelementptr i8* %kernel_data8, i32 %81
- %164 = insertelement <32 x i8*> %162, i8* %163, i32 21
- %165 = getelementptr i8* %kernel_data8, i32 %84
- %166 = insertelement <32 x i8*> %164, i8* %165, i32 22
- %167 = getelementptr i8* %kernel_data8, i32 %87
- %168 = insertelement <32 x i8*> %166, i8* %167, i32 23
- %169 = getelementptr i8* %kernel_data8, i32 %90
- %170 = insertelement <32 x i8*> %168, i8* %169, i32 24
- %171 = getelementptr i8* %kernel_data8, i32 %93
- %172 = insertelement <32 x i8*> %170, i8* %171, i32 25
- %173 = getelementptr i8* %kernel_data8, i32 %96
- %174 = insertelement <32 x i8*> %172, i8* %173, i32 26
- %175 = getelementptr i8* %kernel_data8, i32 %99
- %176 = insertelement <32 x i8*> %174, i8* %175, i32 27
- %177 = getelementptr i8* %kernel_data8, i32 %102
- %178 = insertelement <32 x i8*> %176, i8* %177, i32 28
- %179 = getelementptr i8* %kernel_data8, i32 %105
- %180 = insertelement <32 x i8*> %178, i8* %179, i32 29
- %181 = getelementptr i8* %kernel_data8, i32 %108
- %182 = insertelement <32 x i8*> %180, i8* %181, i32 30
- %183 = getelementptr i8* %kernel_data8, i32 %111
- %184 = insertelement <32 x i8*> %182, i8* %183, i32 31
- %185 = getelementptr i8* %121, i32 0
- %186 = bitcast i8* %185 to <32 x i8>*
- store <32 x i8> %120, <32 x i8>* %186
- %187 = add <32 x i32> %induction, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
- %188 = icmp eq <32 x i32> %187, %broadcast.splat10
- %index.next = add i32 %index, 32
- %189 = icmp eq i32 %index.next, %end.idx.rnd.down
- br i1 %189, label %middle.block, label %vector.body, !llvm.loop !0
- middle.block: ; preds = %vector.body, %entry
- %resume.val = phi i32 [ 0, %entry ], [ %end.idx.rnd.down, %vector.body ]
- %trunc.resume.val = phi i32 [ 0, %entry ], [ %end.idx.rnd.down, %vector.body ]
- %cmp.n = icmp eq i32 %end.idx, %resume.val
- br i1 %cmp.n, label %kernel_loop_exit, label %scalar.ph
- scalar.ph: ; preds = %middle.block
- br label %kernel_loop_body
- kernel_loop_body: ; preds = %kernel_loop_latch, %scalar.ph
- %kernel_i = phi i32 [ %trunc.resume.val, %scalar.ph ], [ %kernel_loop_increment, %kernel_loop_latch ]
- %190 = getelementptr i8* %kernel_data, i32 %kernel_i
- %191 = load i8* %190, !llvm.mem.parallel_loop_access !3
- %kernel = add i8 %191, 32
- %kernel5 = icmp ult i8 %kernel, %191
- %192 = zext i1 %kernel5 to i8
- %kernel6 = sub i8 0, %192
- %kernel7 = or i8 %kernel, %kernel6
- %193 = getelementptr i8* %kernel_data8, i32 %kernel_i
- store i8 %kernel7, i8* %193, !llvm.mem.parallel_loop_access !3
- %kernel_loop_increment = add i32 %kernel_i, 1
- br label %kernel_loop_latch
- kernel_loop_latch: ; preds = %kernel_loop_body
- %kernel_loop_test = icmp eq i32 %kernel_loop_increment, %12
- br i1 %kernel_loop_test, label %kernel_loop_exit, label %kernel_loop_body, !llvm.loop !3
- kernel_loop_exit: ; preds = %middle.block, %kernel_loop_latch
- ret %likely_matrix* %5
- }
- declare noalias %likely_matrix* @likely_new(i32, i32, i32, i32, i32, i8* noalias nocapture, i8)
- attributes #0 = { nounwind }
- !0 = metadata !{metadata !0, metadata !1, metadata !2}
- !1 = metadata !{metadata !"llvm.vectorizer.width", i32 1}
- !2 = metadata !{metadata !"llvm.vectorizer.unroll", i32 1}
- !3 = metadata !{metadata !3, metadata !1, metadata !2}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement