void dtrset_lib(int row, double alpha, int offset, double *pA, int sda) {
  const int bs = 4;
  int ii, jj;
  int col = row;
  int na = (bs - offset % bs) % bs;
  na = row < na ? row : na;
  ii = 0;
  if (na > 0) {
    for (; ii < na; ii++) {
      for (jj = 0; jj <= ii; jj++) {
        pA[jj * bs] = alpha;
      }
      pA += 1;
    }
    pA += bs * (sda - 1);
  }
  for (; ii < row - 3; ii += 4) {
    for (jj = 0; jj < ii; jj++) {
      pA[0 + jj * bs] = alpha;
      pA[1 + jj * bs] = alpha;
      pA[2 + jj * bs] = alpha;
      pA[3 + jj * bs] = alpha;
    }
    pA[0 + (jj + 0) * bs] = alpha;
    pA[1 + (jj + 0) * bs] = alpha;
    pA[2 + (jj + 0) * bs] = alpha;
    pA[3 + (jj + 0) * bs] = alpha;
    pA[1 + (jj + 1) * bs] = alpha;
    pA[2 + (jj + 1) * bs] = alpha;
    pA[3 + (jj + 1) * bs] = alpha;
    pA[2 + (jj + 2) * bs] = alpha;
    pA[3 + (jj + 2) * bs] = alpha;
    pA[3 + (jj + 3) * bs] = alpha;
    pA += bs * sda;
  }
  for (; ii < row; ii++) {
    for (jj = 0; jj < ii + 1; jj++) {
      pA[jj * bs] = alpha;
    }
    pA += 1;
  }
}


x86 assembly (clang, -O0):
<dtrset_lib>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
movl   $0x4,-0x28(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    $0x4,%eax
sub    %edx,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %edx,-0x38(%rbp)
mov    -0x4(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    1157 <dtrset_lib+0x57>
mov    -0x4(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    115d <dtrset_lib+0x5d>
mov    -0x38(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
movl   $0x0,-0x2c(%rbp)
cmpl   $0x0,-0x38(%rbp)
jle    11f2 <dtrset_lib+0xf2>
jmp    1179 <dtrset_lib+0x79>
mov    -0x2c(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    11d7 <dtrset_lib+0xd7>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     11bd <dtrset_lib+0xbd>
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    118c <dtrset_lib+0x8c>
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1179 <dtrset_lib+0x79>
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
jmp    11f7 <dtrset_lib+0xf7>
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    13d9 <dtrset_lib+0x2d9>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jge    1291 <dtrset_lib+0x191>
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    120f <dtrset_lib+0x10f>
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x2,%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x2,%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x3,%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    11f7 <dtrset_lib+0xf7>
jmp    13de <dtrset_lib+0x2de>
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1441 <dtrset_lib+0x341>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1427 <dtrset_lib+0x327>
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    13f1 <dtrset_lib+0x2f1>
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    13de <dtrset_lib+0x2de>
pop    %rbp
ret

x86 assembly (clang, -O2):
<dtrset_lib>:
push   %r15
push   %r14
push   %rbx
neg    %esi
and    $0x3,%esi
cmp    %edi,%esi
cmovg  %edi,%esi
test   %esi,%esi
jle    11bf <dtrset_lib+0xbf>
lea    0x1(%rsi),%r8d
lea    0x60(%rdx),%r9
mov    $0x1,%r11d
xor    %r10d,%r10d
jmp    1145 <dtrset_lib+0x45>
nopw   0x0(%rax,%rax,1)
add    $0x8,%rdx
add    $0x1,%r11
add    $0x1,%r10
add    $0x8,%r9
cmp    %r8,%r11
je     11b0 <dtrset_lib+0xb0>
cmp    $0x3,%r10
jae    1150 <dtrset_lib+0x50>
xor    %eax,%eax
jmp    1180 <dtrset_lib+0x80>
nop
mov    %r11,%r14
and    $0xfffffffffffffffc,%r14
mov    %r9,%rbx
xor    %eax,%eax
nopl   0x0(%rax)
movsd  %xmm0,-0x60(%rbx)
movsd  %xmm0,-0x40(%rbx)
movsd  %xmm0,-0x20(%rbx)
movsd  %xmm0,(%rbx)
add    $0x4,%rax
sub    $0xffffffffffffff80,%rbx
cmp    %rax,%r14
jne    1160 <dtrset_lib+0x60>
test   $0x3,%r11b
je     1130 <dtrset_lib+0x30>
mov    %r11d,%r14d
and    $0x3,%r14d
shl    $0x5,%r14
shl    $0x5,%rax
add    %rdx,%rax
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
movsd  %xmm0,(%rax,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%r14
jne    11a0 <dtrset_lib+0xa0>
jmp    1130 <dtrset_lib+0x30>
lea    -0x4(,%rcx,4),%eax
cltq
lea    (%rdx,%rax,8),%rdx
jmp    11c1 <dtrset_lib+0xc1>
xor    %esi,%esi
lea    -0x3(%rdi),%eax
cmp    %eax,%esi
jge    1335 <dtrset_lib+0x235>
shl    $0x2,%ecx
movslq %ecx,%r9
mov    %esi,%esi
movslq %eax,%r8
movaps %xmm0,%xmm1
movlhps %xmm0,%xmm1
lea    0x40(%rdx),%r11
shl    $0x3,%r9
mov    %esi,%r14d
and    $0xfffffffc,%r14d
movabs $0x7ffffffffffffffc,%r10
ff ff 7f
jmp    129d <dtrset_lib+0x19d>
nopl   0x0(%rax,%rax,1)
mov    %esi,%ecx
lea    0x0(,%rcx,4),%eax
movsd  %xmm0,(%rdx,%rax,8)
lea    0x1(,%rcx,4),%eax
movsd  %xmm0,(%rdx,%rax,8)
lea    0x2(,%rcx,4),%eax
movsd  %xmm0,(%rdx,%rax,8)
lea    0x3(,%rcx,4),%eax
movsd  %xmm0,(%rdx,%rax,8)
lea    0x5(,%rcx,4),%eax
cltq
movsd  %xmm0,(%rdx,%rax,8)
lea    0x6(,%rcx,4),%eax
cltq
movsd  %xmm0,(%rdx,%rax,8)
lea    0x7(,%rcx,4),%eax
cltq
movsd  %xmm0,(%rdx,%rax,8)
lea    0xa(,%rcx,4),%eax
cltq
movsd  %xmm0,(%rdx,%rax,8)
lea    0xb(,%rcx,4),%eax
cltq
movsd  %xmm0,(%rdx,%rax,8)
lea    0xf(,%rcx,4),%eax
cltq
movsd  %xmm0,(%rdx,%rax,8)
add    %r9,%rdx
add    $0x4,%rsi
add    %r9,%r11
add    $0x4,%r14
cmp    %r8,%rsi
jge    1335 <dtrset_lib+0x235>
mov    $0x0,%ecx
test   %rsi,%rsi
je     1202 <dtrset_lib+0x102>
cmp    $0x4,%rsi
jae    12c0 <dtrset_lib+0x1c0>
xor    %ecx,%ecx
jmp    1302 <dtrset_lib+0x202>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %rsi,%rcx
and    %r10,%rcx
mov    %r14,%rbx
mov    %r11,%rax
nopl   0x0(%rax)
movups %xmm1,-0x40(%rax)
movups %xmm1,-0x30(%rax)
movups %xmm1,-0x20(%rax)
movups %xmm1,-0x10(%rax)
movups %xmm1,(%rax)
movups %xmm1,0x10(%rax)
movups %xmm1,0x20(%rax)
movups %xmm1,0x30(%rax)
sub    $0xffffffffffffff80,%rax
add    $0xfffffffffffffffc,%rbx
jne    12d0 <dtrset_lib+0x1d0>
cmp    %rcx,%rsi
je     1200 <dtrset_lib+0x100>
mov    %rcx,%rbx
shl    $0x5,%rbx
add    %rdx,%rbx
nopl   0x0(%rax)
movsd  %xmm0,(%rbx)
movsd  %xmm0,0x8(%rbx)
movsd  %xmm0,0x10(%rbx)
movsd  %xmm0,0x18(%rbx)
add    $0x1,%rcx
add    $0x20,%rbx
cmp    %rcx,%rsi
jne    1310 <dtrset_lib+0x210>
jmp    1200 <dtrset_lib+0x100>
cmp    %edi,%esi
jge    13e3 <dtrset_lib+0x2e3>
mov    %esi,%r10d
lea    0x1(%r10),%r8
lea    0x60(%rdx),%r9
xor    %r11d,%r11d
mov    %r8,%r15
jmp    136b <dtrset_lib+0x26b>
add    $0x1,%r10
add    $0x1,%esi
add    $0x8,%rdx
add    $0x1,%r11
add    $0x8,%r9
add    $0x1,%r15
cmp    %edi,%esi
je     13e3 <dtrset_lib+0x2e3>
lea    (%r8,%r11,1),%r14
cmp    $0x3,%r10
jae    1380 <dtrset_lib+0x280>
xor    %ecx,%ecx
jmp    13b0 <dtrset_lib+0x2b0>
nopl   0x0(%rax)
mov    %r15,%rax
and    $0xfffffffffffffffc,%rax
mov    %r9,%rbx
xor    %ecx,%ecx
nopl   0x0(%rax)
movsd  %xmm0,-0x60(%rbx)
movsd  %xmm0,-0x40(%rbx)
movsd  %xmm0,-0x20(%rbx)
movsd  %xmm0,(%rbx)
add    $0x4,%rcx
sub    $0xffffffffffffff80,%rbx
cmp    %rcx,%rax
jne    1390 <dtrset_lib+0x290>
test   $0x3,%r14b
je     1350 <dtrset_lib+0x250>
mov    %r15d,%eax
and    $0x3,%eax
shl    $0x5,%rax
shl    $0x5,%rcx
add    %rdx,%rcx
xor    %ebx,%ebx
nopl   0x0(%rax)
movsd  %xmm0,(%rcx,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%rax
jne    13d0 <dtrset_lib+0x2d0>
jmp    1350 <dtrset_lib+0x250>
pop    %rbx
pop    %r14
pop    %r15
ret

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

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