void get_local_12_norm(int n, int i, int *ia, int *ja, int *p, double *norm) {
  int j;
  norm[0] = n;
  norm[1] = 0;
  for (j = ia[i]; j < ia[i + 1]; j++) {
    if (ja[j] == i)
      continue;
    norm[0] = ((norm[0]) < ((((p[i] - p[ja[j]]) > 0) ? (p[i] - p[ja[j]])
                                                     : (-(p[i] - p[ja[j]]))))
                   ? (norm[0])
                   : (((p[i] - p[ja[j]]) > 0) ? (p[i] - p[ja[j]])
                                              : (-(p[i] - p[ja[j]]))));
    norm[1] +=
        (((p[i] - p[ja[j]]) > 0) ? (p[i] - p[ja[j]]) : (-(p[i] - p[ja[j]])));
  }
}


x86 assembly (clang, -O0):
<get_local_12_norm>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
cvtsi2sdl -0x4(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x10(%rbp),%rcx
mov    -0x8(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jge    133a <get_local_12_norm+0x23a>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x8(%rbp),%eax
jne    1173 <get_local_12_norm+0x73>
jmp    132c <get_local_12_norm+0x22c>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
mov    -0x18(%rbp),%rdx
movslq -0x2c(%rbp),%rsi
movslq (%rdx,%rsi,4),%rdx
sub    (%rcx,%rdx,4),%eax
cmp    $0x0,%eax
jle    11cd <get_local_12_norm+0xcd>
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
mov    -0x18(%rbp),%rdx
movslq -0x2c(%rbp),%rsi
movslq (%rdx,%rsi,4),%rdx
sub    (%rcx,%rdx,4),%eax
mov    %eax,-0x3c(%rbp)
jmp    11f2 <get_local_12_norm+0xf2>
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x20(%rbp),%rax
mov    -0x18(%rbp),%rdx
movslq -0x2c(%rbp),%rsi
movslq (%rdx,%rsi,4),%rdx
sub    (%rax,%rdx,4),%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x3c(%rbp)
movsd  -0x38(%rbp),%xmm1
mov    -0x3c(%rbp),%eax
cvtsi2sd %eax,%xmm0
ucomisd %xmm1,%xmm0
jbe    121a <get_local_12_norm+0x11a>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1298 <get_local_12_norm+0x198>
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
mov    -0x18(%rbp),%rdx
movslq -0x2c(%rbp),%rsi
movslq (%rdx,%rsi,4),%rdx
sub    (%rcx,%rdx,4),%eax
cmp    $0x0,%eax
jle    1267 <get_local_12_norm+0x167>
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
mov    -0x18(%rbp),%rdx
movslq -0x2c(%rbp),%rsi
movslq (%rdx,%rsi,4),%rdx
sub    (%rcx,%rdx,4),%eax
mov    %eax,-0x4c(%rbp)
jmp    128c <get_local_12_norm+0x18c>
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x20(%rbp),%rax
mov    -0x18(%rbp),%rdx
movslq -0x2c(%rbp),%rsi
movslq (%rdx,%rsi,4),%rdx
sub    (%rax,%rdx,4),%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
mov    -0x18(%rbp),%rdx
movslq -0x2c(%rbp),%rsi
movslq (%rdx,%rsi,4),%rdx
sub    (%rcx,%rdx,4),%eax
cmp    $0x0,%eax
jle    12f2 <get_local_12_norm+0x1f2>
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
mov    -0x18(%rbp),%rdx
movslq -0x2c(%rbp),%rsi
movslq (%rdx,%rsi,4),%rdx
sub    (%rcx,%rdx,4),%eax
mov    %eax,-0x50(%rbp)
jmp    1317 <get_local_12_norm+0x217>
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x20(%rbp),%rax
mov    -0x18(%rbp),%rdx
movslq -0x2c(%rbp),%rsi
movslq (%rdx,%rsi,4),%rdx
sub    (%rax,%rdx,4),%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x28(%rbp),%rax
addsd  0x8(%rax),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1141 <get_local_12_norm+0x41>
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_local_12_norm>:
cvtsi2sd %edi,%xmm0
movsd  %xmm0,(%r9)
movq   $0x0,0x8(%r9)
movslq %esi,%r10
movslq (%rdx,%r10,4),%rdi
movslq 0x4(%rdx,%r10,4),%r11
cmp    %r11d,%edi
jge    116c <get_local_12_norm+0x6c>
xorpd  %xmm1,%xmm1
jmp    1139 <get_local_12_norm+0x39>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rdi
cmp    %rdi,%r11
je     116c <get_local_12_norm+0x6c>
movslq (%rcx,%rdi,4),%rax
cmp    %esi,%eax
je     1130 <get_local_12_norm+0x30>
mov    (%r8,%r10,4),%edx
sub    (%r8,%rax,4),%edx
mov    %edx,%eax
neg    %eax
cmovs  %edx,%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
minsd  %xmm2,%xmm0
movsd  %xmm0,(%r9)
addsd  %xmm2,%xmm1
movsd  %xmm1,0x8(%r9)
jmp    1130 <get_local_12_norm+0x30>
ret

LLVM IR (-O0):
define void @get_local_12_norm(i32 %0, i32 %1, i32* %2, i32* %3, i32* %4, double* %5) {
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32*
%10 = alloca i32*
%11 = alloca i32*
%12 = alloca double*
%13 = alloca i32
store i32 %0, i32* %7
store i32 %1, i32* %8
store i32* %2, i32** %9
store i32* %3, i32** %10
store i32* %4, i32** %11
store double* %5, double** %12
%14 = load i32, i32* %7
%15 = sitofp i32 %14 to double
%16 = load double*, double** %12
%17 = getelementptr inbounds double, double* %16, i64 0
store double %15, double* %17
%18 = load double*, double** %12
%19 = getelementptr inbounds double, double* %18, i64 1
store double 0.000000e+00, double* %19
%20 = load i32*, i32** %9
%21 = load i32, i32* %8
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds i32, i32* %20, i64 %22
%24 = load i32, i32* %23
store i32 %24, i32* %13
br label %25
25: ; preds = %217, %6
%26 = load i32, i32* %13
%27 = load i32*, i32** %9
%28 = load i32, i32* %8
%29 = add nsw i32 %28, 1
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds i32, i32* %27, i64 %30
%32 = load i32, i32* %31
%33 = icmp slt i32 %26, %32
br i1 %33, label %34, label %220
34: ; preds = %25
%35 = load i32*, i32** %10
%36 = load i32, i32* %13
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i32, i32* %35, i64 %37
%39 = load i32, i32* %38
%40 = load i32, i32* %8
%41 = icmp eq i32 %39, %40
br i1 %41, label %42, label %43
42: ; preds = %34
br label %217
43: ; preds = %34
%44 = load double*, double** %12
%45 = getelementptr inbounds double, double* %44, i64 0
%46 = load double, double* %45
%47 = load i32*, i32** %11
%48 = load i32, i32* %8
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds i32, i32* %47, i64 %49
%51 = load i32, i32* %50
%52 = load i32*, i32** %11
%53 = load i32*, i32** %10
%54 = load i32, i32* %13
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i32, i32* %53, i64 %55
%57 = load i32, i32* %56
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i32, i32* %52, i64 %58
%60 = load i32, i32* %59
%61 = sub nsw i32 %51, %60
%62 = icmp sgt i32 %61, 0
br i1 %62, label %63, label %79
63: ; preds = %43
%64 = load i32*, i32** %11
%65 = load i32, i32* %8
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i32, i32* %64, i64 %66
%68 = load i32, i32* %67
%69 = load i32*, i32** %11
%70 = load i32*, i32** %10
%71 = load i32, i32* %13
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds i32, i32* %70, i64 %72
%74 = load i32, i32* %73
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds i32, i32* %69, i64 %75
%77 = load i32, i32* %76
%78 = sub nsw i32 %68, %77
br label %96
79: ; preds = %43
%80 = load i32*, i32** %11
%81 = load i32, i32* %8
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds i32, i32* %80, i64 %82
%84 = load i32, i32* %83
%85 = load i32*, i32** %11
%86 = load i32*, i32** %10
%87 = load i32, i32* %13
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds i32, i32* %86, i64 %88
%90 = load i32, i32* %89
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds i32, i32* %85, i64 %91
%93 = load i32, i32* %92
%94 = sub nsw i32 %84, %93
%95 = sub nsw i32 0, %94
br label %96
96: ; preds = %79, %63
%97 = phi i32 [ %78, %63 ], [ %95, %79 ]
%98 = sitofp i32 %97 to double
%99 = fcmp olt double %46, %98
br i1 %99, label %100, label %104
100: ; preds = %96
%101 = load double*, double** %12
%102 = getelementptr inbounds double, double* %101, i64 0
%103 = load double, double* %102
br label %157
104: ; preds = %96
%105 = load i32*, i32** %11
%106 = load i32, i32* %8
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds i32, i32* %105, i64 %107
%109 = load i32, i32* %108
%110 = load i32*, i32** %11
%111 = load i32*, i32** %10
%112 = load i32, i32* %13
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i32, i32* %111, i64 %113
%115 = load i32, i32* %114
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds i32, i32* %110, i64 %116
%118 = load i32, i32* %117
%119 = sub nsw i32 %109, %118
%120 = icmp sgt i32 %119, 0
br i1 %120, label %121, label %137
121: ; preds = %104
%122 = load i32*, i32** %11
%123 = load i32, i32* %8
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds i32, i32* %122, i64 %124
%126 = load i32, i32* %125
%127 = load i32*, i32** %11
%128 = load i32*, i32** %10
%129 = load i32, i32* %13
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds i32, i32* %128, i64 %130
%132 = load i32, i32* %131
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds i32, i32* %127, i64 %133
%135 = load i32, i32* %134
%136 = sub nsw i32 %126, %135
br label %154
137: ; preds = %104
%138 = load i32*, i32** %11
%139 = load i32, i32* %8
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds i32, i32* %138, i64 %140
%142 = load i32, i32* %141
%143 = load i32*, i32** %11
%144 = load i32*, i32** %10
%145 = load i32, i32* %13
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds i32, i32* %144, i64 %146
%148 = load i32, i32* %147
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds i32, i32* %143, i64 %149
%151 = load i32, i32* %150
%152 = sub nsw i32 %142, %151
%153 = sub nsw i32 0, %152
br label %154
154: ; preds = %137, %121
%155 = phi i32 [ %136, %121 ], [ %153, %137 ]
%156 = sitofp i32 %155 to double
br label %157
157: ; preds = %154, %100
%158 = phi double [ %103, %100 ], [ %156, %154 ]
%159 = load double*, double** %12
%160 = getelementptr inbounds double, double* %159, i64 0
store double %158, double* %160
%161 = load i32*, i32** %11
%162 = load i32, i32* %8
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds i32, i32* %161, i64 %163
%165 = load i32, i32* %164
%166 = load i32*, i32** %11
%167 = load i32*, i32** %10
%168 = load i32, i32* %13
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i32, i32* %167, i64 %169
%171 = load i32, i32* %170
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds i32, i32* %166, i64 %172
%174 = load i32, i32* %173
%175 = sub nsw i32 %165, %174
%176 = icmp sgt i32 %175, 0
br i1 %176, label %177, label %193
177: ; preds = %157
%178 = load i32*, i32** %11
%179 = load i32, i32* %8
%180 = sext i32 %179 to i64
%181 = getelementptr inbounds i32, i32* %178, i64 %180
%182 = load i32, i32* %181
%183 = load i32*, i32** %11
%184 = load i32*, i32** %10
%185 = load i32, i32* %13
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds i32, i32* %184, i64 %186
%188 = load i32, i32* %187
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds i32, i32* %183, i64 %189
%191 = load i32, i32* %190
%192 = sub nsw i32 %182, %191
br label %210
193: ; preds = %157
%194 = load i32*, i32** %11
%195 = load i32, i32* %8
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds i32, i32* %194, i64 %196
%198 = load i32, i32* %197
%199 = load i32*, i32** %11
%200 = load i32*, i32** %10
%201 = load i32, i32* %13
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds i32, i32* %200, i64 %202
%204 = load i32, i32* %203
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds i32, i32* %199, i64 %205
%207 = load i32, i32* %206
%208 = sub nsw i32 %198, %207
%209 = sub nsw i32 0, %208
br label %210
210: ; preds = %193, %177
%211 = phi i32 [ %192, %177 ], [ %209, %193 ]
%212 = sitofp i32 %211 to double
%213 = load double*, double** %12
%214 = getelementptr inbounds double, double* %213, i64 1
%215 = load double, double* %214
%216 = fadd double %215, %212
store double %216, double* %214
br label %217
217: ; preds = %210, %42
%218 = load i32, i32* %13
%219 = add nsw i32 %218, 1
store i32 %219, i32* %13
br label %25
220: ; preds = %25
ret void
}

LLVM IR (-O2):
define void @get_local_12_norm(i32 %0, i32 %1, i32* nocapture %2, i32* nocapture %3, i32* nocapture %4, double* nocapture %5) {
%7 = sitofp i32 %0 to double
store double %7, double* %5
%8 = getelementptr inbounds double, double* %5, i64 1
store double 0.000000e+00, double* %8
%9 = sext i32 %1 to i64
%10 = getelementptr inbounds i32, i32* %2, i64 %9
%11 = load i32, i32* %10
%12 = add nsw i32 %1, 1
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds i32, i32* %2, i64 %13
%15 = load i32, i32* %14
%16 = icmp slt i32 %11, %15
br i1 %16, label %17, label %44
17: ; preds = %6
%18 = getelementptr inbounds i32, i32* %4, i64 %9
%19 = sext i32 %11 to i64
%20 = sext i32 %15 to i64
br label %21
21: ; preds = %17, %39
%22 = phi double [ 0.000000e+00, %17 ], [ %40, %39 ]
%23 = phi double [ %7, %17 ], [ %41, %39 ]
%24 = phi i64 [ %19, %17 ], [ %42, %39 ]
%25 = getelementptr inbounds i32, i32* %3, i64 %24
%26 = load i32, i32* %25
%27 = icmp eq i32 %26, %1
br i1 %27, label %39, label %28
28: ; preds = %21
%29 = load i32, i32* %18
%30 = sext i32 %26 to i64
%31 = getelementptr inbounds i32, i32* %4, i64 %30
%32 = load i32, i32* %31
%33 = sub nsw i32 %29, %32
%34 = tail call i32 @llvm.abs.i32(i32 %33, i1 true)
%35 = sitofp i32 %34 to double
%36 = fcmp olt double %23, %35
%37 = select i1 %36, double %23, double %35
store double %37, double* %5
%38 = fadd double %22, %35
store double %38, double* %8
br label %39
39: ; preds = %21, %28
%40 = phi double [ %22, %21 ], [ %38, %28 ]
%41 = phi double [ %23, %21 ], [ %37, %28 ]
%42 = add nsw i64 %24, 1
%43 = icmp eq i64 %42, %20
br i1 %43, label %44, label %21
44: ; preds = %39, %6
ret void
}