brintos

brintos / llvm-project-archived public Read only

0
0
Text · 26.0 KiB · 42bd6e9 Raw
746 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s3 4; Don't optimize away zext-inreg and sext-inreg on the loop induction5; variable, because it isn't safe to do so in these cases.6 7define void @count_up(ptr %d, i64 %n) nounwind {8; CHECK-LABEL: count_up:9; CHECK:       # %bb.0: # %entry10; CHECK-NEXT:    movl $10, %eax11; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]12; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]13; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]14; CHECK-NEXT:    .p2align 415; CHECK-NEXT:  .LBB0_1: # %loop16; CHECK-NEXT:    # =>This Inner Loop Header: Depth=117; CHECK-NEXT:    movzbl %al, %ecx18; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero19; CHECK-NEXT:    mulsd %xmm0, %xmm320; CHECK-NEXT:    movsd %xmm3, (%rdi,%rcx,8)21; CHECK-NEXT:    movl %eax, %ecx22; CHECK-NEXT:    andl $16777215, %ecx # imm = 0xFFFFFF23; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero24; CHECK-NEXT:    mulsd %xmm1, %xmm325; CHECK-NEXT:    movsd %xmm3, (%rdi,%rcx,8)26; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero27; CHECK-NEXT:    mulsd %xmm2, %xmm328; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax,8)29; CHECK-NEXT:    incq %rax30; CHECK-NEXT:    jne .LBB0_131; CHECK-NEXT:  # %bb.2: # %return32; CHECK-NEXT:    retq33entry:34	br label %loop35 36loop:37	%indvar = phi i64 [ 10, %entry ], [ %indvar.next, %loop ]38	%indvar.i8 = and i64 %indvar, 25539	%t0 = getelementptr double, ptr %d, i64 %indvar.i840	%t1 = load double, ptr %t041	%t2 = fmul double %t1, 0.142	store double %t2, ptr %t043	%indvar.i24 = and i64 %indvar, 1677721544	%t3 = getelementptr double, ptr %d, i64 %indvar.i2445	%t4 = load double, ptr %t346	%t5 = fmul double %t4, 2.347	store double %t5, ptr %t348	%t6 = getelementptr double, ptr %d, i64 %indvar49	%t7 = load double, ptr %t650	%t8 = fmul double %t7, 4.551	store double %t8, ptr %t652	%indvar.next = add i64 %indvar, 153	%exitcond = icmp eq i64 %indvar.next, 054	br i1 %exitcond, label %return, label %loop55 56return:57	ret void58}59 60define void @count_down(ptr %d, i64 %n) nounwind {61; CHECK-LABEL: count_down:62; CHECK:       # %bb.0: # %entry63; CHECK-NEXT:    movl $10, %eax64; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]65; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]66; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]67; CHECK-NEXT:    .p2align 468; CHECK-NEXT:  .LBB1_1: # %loop69; CHECK-NEXT:    # =>This Inner Loop Header: Depth=170; CHECK-NEXT:    movzbl %al, %ecx71; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero72; CHECK-NEXT:    mulsd %xmm0, %xmm373; CHECK-NEXT:    movsd %xmm3, (%rdi,%rcx,8)74; CHECK-NEXT:    movl %eax, %ecx75; CHECK-NEXT:    andl $16777215, %ecx # imm = 0xFFFFFF76; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero77; CHECK-NEXT:    mulsd %xmm1, %xmm378; CHECK-NEXT:    movsd %xmm3, (%rdi,%rcx,8)79; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero80; CHECK-NEXT:    mulsd %xmm2, %xmm381; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax,8)82; CHECK-NEXT:    decq %rax83; CHECK-NEXT:    cmpq $20, %rax84; CHECK-NEXT:    jne .LBB1_185; CHECK-NEXT:  # %bb.2: # %return86; CHECK-NEXT:    retq87entry:88	br label %loop89 90loop:91	%indvar = phi i64 [ 10, %entry ], [ %indvar.next, %loop ]92	%indvar.i8 = and i64 %indvar, 25593	%t0 = getelementptr double, ptr %d, i64 %indvar.i894	%t1 = load double, ptr %t095	%t2 = fmul double %t1, 0.196	store double %t2, ptr %t097	%indvar.i24 = and i64 %indvar, 1677721598	%t3 = getelementptr double, ptr %d, i64 %indvar.i2499	%t4 = load double, ptr %t3100	%t5 = fmul double %t4, 2.3101	store double %t5, ptr %t3102	%t6 = getelementptr double, ptr %d, i64 %indvar103	%t7 = load double, ptr %t6104	%t8 = fmul double %t7, 4.5105	store double %t8, ptr %t6106	%indvar.next = sub i64 %indvar, 1107	%exitcond = icmp eq i64 %indvar.next, 20108	br i1 %exitcond, label %return, label %loop109 110return:111	ret void112}113 114define void @count_up_signed(ptr %d, i64 %n) nounwind {115; CHECK-LABEL: count_up_signed:116; CHECK:       # %bb.0: # %entry117; CHECK-NEXT:    movl $10, %eax118; CHECK-NEXT:    movl $167772160, %ecx # imm = 0xA000000119; CHECK-NEXT:    movl $2560, %edx # imm = 0xA00120; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]121; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]122; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]123; CHECK-NEXT:    .p2align 4124; CHECK-NEXT:  .LBB2_1: # %loop125; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1126; CHECK-NEXT:    movq %rdx, %rsi127; CHECK-NEXT:    sarq $8, %rsi128; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero129; CHECK-NEXT:    mulsd %xmm0, %xmm3130; CHECK-NEXT:    movsd %xmm3, (%rdi,%rsi,8)131; CHECK-NEXT:    movq %rcx, %rsi132; CHECK-NEXT:    sarq $24, %rsi133; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero134; CHECK-NEXT:    mulsd %xmm1, %xmm3135; CHECK-NEXT:    movsd %xmm3, (%rdi,%rsi,8)136; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero137; CHECK-NEXT:    mulsd %xmm2, %xmm3138; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax,8)139; CHECK-NEXT:    addq $16777216, %rcx # imm = 0x1000000140; CHECK-NEXT:    addq $256, %rdx # imm = 0x100141; CHECK-NEXT:    incq %rax142; CHECK-NEXT:    jne .LBB2_1143; CHECK-NEXT:  # %bb.2: # %return144; CHECK-NEXT:    retq145entry:146	br label %loop147 148loop:149	%indvar = phi i64 [ 10, %entry ], [ %indvar.next, %loop ]150        %s0 = shl i64 %indvar, 8151	%indvar.i8 = ashr i64 %s0, 8152	%t0 = getelementptr double, ptr %d, i64 %indvar.i8153	%t1 = load double, ptr %t0154	%t2 = fmul double %t1, 0.1155	store double %t2, ptr %t0156	%s1 = shl i64 %indvar, 24157	%indvar.i24 = ashr i64 %s1, 24158	%t3 = getelementptr double, ptr %d, i64 %indvar.i24159	%t4 = load double, ptr %t3160	%t5 = fmul double %t4, 2.3161	store double %t5, ptr %t3162	%t6 = getelementptr double, ptr %d, i64 %indvar163	%t7 = load double, ptr %t6164	%t8 = fmul double %t7, 4.5165	store double %t8, ptr %t6166	%indvar.next = add i64 %indvar, 1167	%exitcond = icmp eq i64 %indvar.next, 0168	br i1 %exitcond, label %return, label %loop169 170return:171	ret void172}173 174define void @count_down_signed(ptr %d, i64 %n) nounwind {175; CHECK-LABEL: count_down_signed:176; CHECK:       # %bb.0: # %entry177; CHECK-NEXT:    movq $-10, %rax178; CHECK-NEXT:    movl $167772160, %ecx # imm = 0xA000000179; CHECK-NEXT:    movl $2560, %edx # imm = 0xA00180; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]181; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]182; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]183; CHECK-NEXT:    .p2align 4184; CHECK-NEXT:  .LBB3_1: # %loop185; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1186; CHECK-NEXT:    movq %rdx, %rsi187; CHECK-NEXT:    sarq $8, %rsi188; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero189; CHECK-NEXT:    mulsd %xmm0, %xmm3190; CHECK-NEXT:    movsd %xmm3, (%rdi,%rsi,8)191; CHECK-NEXT:    movq %rcx, %rsi192; CHECK-NEXT:    sarq $24, %rsi193; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero194; CHECK-NEXT:    mulsd %xmm1, %xmm3195; CHECK-NEXT:    movsd %xmm3, (%rdi,%rsi,8)196; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero197; CHECK-NEXT:    mulsd %xmm2, %xmm3198; CHECK-NEXT:    movsd %xmm3, 160(%rdi,%rax,8)199; CHECK-NEXT:    addq $-16777216, %rcx # imm = 0xFF000000200; CHECK-NEXT:    addq $-256, %rdx201; CHECK-NEXT:    decq %rax202; CHECK-NEXT:    jne .LBB3_1203; CHECK-NEXT:  # %bb.2: # %return204; CHECK-NEXT:    retq205entry:206	br label %loop207 208loop:209	%indvar = phi i64 [ 10, %entry ], [ %indvar.next, %loop ]210        %s0 = shl i64 %indvar, 8211	%indvar.i8 = ashr i64 %s0, 8212	%t0 = getelementptr double, ptr %d, i64 %indvar.i8213	%t1 = load double, ptr %t0214	%t2 = fmul double %t1, 0.1215	store double %t2, ptr %t0216	%s1 = shl i64 %indvar, 24217	%indvar.i24 = ashr i64 %s1, 24218	%t3 = getelementptr double, ptr %d, i64 %indvar.i24219	%t4 = load double, ptr %t3220	%t5 = fmul double %t4, 2.3221	store double %t5, ptr %t3222	%t6 = getelementptr double, ptr %d, i64 %indvar223	%t7 = load double, ptr %t6224	%t8 = fmul double %t7, 4.5225	store double %t8, ptr %t6226	%indvar.next = sub i64 %indvar, 1227	%exitcond = icmp eq i64 %indvar.next, 20228	br i1 %exitcond, label %return, label %loop229 230return:231	ret void232}233 234define void @another_count_up(ptr %d, i64 %n) nounwind {235; CHECK-LABEL: another_count_up:236; CHECK:       # %bb.0: # %entry237; CHECK-NEXT:    xorl %eax, %eax238; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]239; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]240; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]241; CHECK-NEXT:    .p2align 4242; CHECK-NEXT:  .LBB4_1: # %loop243; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1244; CHECK-NEXT:    movzbl %al, %ecx245; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero246; CHECK-NEXT:    mulsd %xmm0, %xmm3247; CHECK-NEXT:    movsd %xmm3, (%rdi,%rcx,8)248; CHECK-NEXT:    movl %eax, %ecx249; CHECK-NEXT:    andl $16777215, %ecx # imm = 0xFFFFFF250; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero251; CHECK-NEXT:    mulsd %xmm1, %xmm3252; CHECK-NEXT:    movsd %xmm3, (%rdi,%rcx,8)253; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero254; CHECK-NEXT:    mulsd %xmm2, %xmm3255; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax,8)256; CHECK-NEXT:    incq %rax257; CHECK-NEXT:    cmpq %rax, %rsi258; CHECK-NEXT:    jne .LBB4_1259; CHECK-NEXT:  # %bb.2: # %return260; CHECK-NEXT:    retq261entry:262        br label %loop263 264loop:265        %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %loop ]266        %indvar.i8 = and i64 %indvar, 255267        %t0 = getelementptr double, ptr %d, i64 %indvar.i8268        %t1 = load double, ptr %t0269        %t2 = fmul double %t1, 0.1270        store double %t2, ptr %t0271        %indvar.i24 = and i64 %indvar, 16777215272        %t3 = getelementptr double, ptr %d, i64 %indvar.i24273        %t4 = load double, ptr %t3274        %t5 = fmul double %t4, 2.3275        store double %t5, ptr %t3276        %t6 = getelementptr double, ptr %d, i64 %indvar277        %t7 = load double, ptr %t6278        %t8 = fmul double %t7, 4.5279        store double %t8, ptr %t6280        %indvar.next = add i64 %indvar, 1281        %exitcond = icmp eq i64 %indvar.next, %n282        br i1 %exitcond, label %return, label %loop283 284return:285        ret void286}287 288define void @another_count_down(ptr %d, i64 %n) nounwind {289; CHECK-LABEL: another_count_down:290; CHECK:       # %bb.0: # %entry291; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]292; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]293; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]294; CHECK-NEXT:    .p2align 4295; CHECK-NEXT:  .LBB5_1: # %loop296; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1297; CHECK-NEXT:    movzbl %sil, %eax298; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero299; CHECK-NEXT:    mulsd %xmm0, %xmm3300; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax,8)301; CHECK-NEXT:    movl %esi, %eax302; CHECK-NEXT:    andl $16777215, %eax # imm = 0xFFFFFF303; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero304; CHECK-NEXT:    mulsd %xmm1, %xmm3305; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax,8)306; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero307; CHECK-NEXT:    mulsd %xmm2, %xmm3308; CHECK-NEXT:    movsd %xmm3, (%rdi,%rsi,8)309; CHECK-NEXT:    decq %rsi310; CHECK-NEXT:    cmpq $10, %rsi311; CHECK-NEXT:    jne .LBB5_1312; CHECK-NEXT:  # %bb.2: # %return313; CHECK-NEXT:    retq314entry:315        br label %loop316 317loop:318        %indvar = phi i64 [ %n, %entry ], [ %indvar.next, %loop ]319        %indvar.i8 = and i64 %indvar, 255320        %t0 = getelementptr double, ptr %d, i64 %indvar.i8321        %t1 = load double, ptr %t0322        %t2 = fmul double %t1, 0.1323        store double %t2, ptr %t0324        %indvar.i24 = and i64 %indvar, 16777215325        %t3 = getelementptr double, ptr %d, i64 %indvar.i24326        %t4 = load double, ptr %t3327        %t5 = fmul double %t4, 2.3328        store double %t5, ptr %t3329        %t6 = getelementptr double, ptr %d, i64 %indvar330        %t7 = load double, ptr %t6331        %t8 = fmul double %t7, 4.5332        store double %t8, ptr %t6333        %indvar.next = sub i64 %indvar, 1334        %exitcond = icmp eq i64 %indvar.next, 10335        br i1 %exitcond, label %return, label %loop336 337return:338        ret void339}340 341define void @another_count_up_signed(ptr %d, i64 %n) nounwind {342; CHECK-LABEL: another_count_up_signed:343; CHECK:       # %bb.0: # %entry344; CHECK-NEXT:    xorl %eax, %eax345; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]346; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]347; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]348; CHECK-NEXT:    xorl %ecx, %ecx349; CHECK-NEXT:    movq %rdi, %rdx350; CHECK-NEXT:    .p2align 4351; CHECK-NEXT:  .LBB6_1: # %loop352; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1353; CHECK-NEXT:    movq %rax, %r8354; CHECK-NEXT:    sarq $8, %r8355; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero356; CHECK-NEXT:    mulsd %xmm0, %xmm3357; CHECK-NEXT:    movsd %xmm3, (%rdi,%r8,8)358; CHECK-NEXT:    movq %rcx, %r8359; CHECK-NEXT:    sarq $24, %r8360; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero361; CHECK-NEXT:    mulsd %xmm1, %xmm3362; CHECK-NEXT:    movsd %xmm3, (%rdi,%r8,8)363; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero364; CHECK-NEXT:    mulsd %xmm2, %xmm3365; CHECK-NEXT:    movsd %xmm3, (%rdx)366; CHECK-NEXT:    addq $8, %rdx367; CHECK-NEXT:    addq $16777216, %rcx # imm = 0x1000000368; CHECK-NEXT:    addq $256, %rax # imm = 0x100369; CHECK-NEXT:    decq %rsi370; CHECK-NEXT:    jne .LBB6_1371; CHECK-NEXT:  # %bb.2: # %return372; CHECK-NEXT:    retq373entry:374        br label %loop375 376loop:377        %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %loop ]378        %s0 = shl i64 %indvar, 8379        %indvar.i8 = ashr i64 %s0, 8380        %t0 = getelementptr double, ptr %d, i64 %indvar.i8381        %t1 = load double, ptr %t0382        %t2 = fmul double %t1, 0.1383        store double %t2, ptr %t0384        %s1 = shl i64 %indvar, 24385        %indvar.i24 = ashr i64 %s1, 24386        %t3 = getelementptr double, ptr %d, i64 %indvar.i24387        %t4 = load double, ptr %t3388        %t5 = fmul double %t4, 2.3389        store double %t5, ptr %t3390        %t6 = getelementptr double, ptr %d, i64 %indvar391        %t7 = load double, ptr %t6392        %t8 = fmul double %t7, 4.5393        store double %t8, ptr %t6394        %indvar.next = add i64 %indvar, 1395        %exitcond = icmp eq i64 %indvar.next, %n396        br i1 %exitcond, label %return, label %loop397 398return:399        ret void400}401 402define void @another_count_down_signed(ptr %d, i64 %n) nounwind {403; CHECK-LABEL: another_count_down_signed:404; CHECK:       # %bb.0: # %entry405; CHECK-NEXT:    leaq -10(%rsi), %rax406; CHECK-NEXT:    movq %rsi, %rcx407; CHECK-NEXT:    shlq $24, %rcx408; CHECK-NEXT:    shlq $8, %rsi409; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]410; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]411; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]412; CHECK-NEXT:    .p2align 4413; CHECK-NEXT:  .LBB7_1: # %loop414; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1415; CHECK-NEXT:    movq %rsi, %rdx416; CHECK-NEXT:    sarq $8, %rdx417; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero418; CHECK-NEXT:    mulsd %xmm0, %xmm3419; CHECK-NEXT:    movsd %xmm3, (%rdi,%rdx,8)420; CHECK-NEXT:    movq %rcx, %rdx421; CHECK-NEXT:    sarq $24, %rdx422; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero423; CHECK-NEXT:    mulsd %xmm1, %xmm3424; CHECK-NEXT:    movsd %xmm3, (%rdi,%rdx,8)425; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero426; CHECK-NEXT:    mulsd %xmm2, %xmm3427; CHECK-NEXT:    movsd %xmm3, 80(%rdi,%rax,8)428; CHECK-NEXT:    addq $-16777216, %rcx # imm = 0xFF000000429; CHECK-NEXT:    addq $-256, %rsi430; CHECK-NEXT:    decq %rax431; CHECK-NEXT:    jne .LBB7_1432; CHECK-NEXT:  # %bb.2: # %return433; CHECK-NEXT:    retq434entry:435        br label %loop436 437loop:438        %indvar = phi i64 [ %n, %entry ], [ %indvar.next, %loop ]439        %s0 = shl i64 %indvar, 8440        %indvar.i8 = ashr i64 %s0, 8441        %t0 = getelementptr double, ptr %d, i64 %indvar.i8442        %t1 = load double, ptr %t0443        %t2 = fmul double %t1, 0.1444        store double %t2, ptr %t0445        %s1 = shl i64 %indvar, 24446        %indvar.i24 = ashr i64 %s1, 24447        %t3 = getelementptr double, ptr %d, i64 %indvar.i24448        %t4 = load double, ptr %t3449        %t5 = fmul double %t4, 2.3450        store double %t5, ptr %t3451        %t6 = getelementptr double, ptr %d, i64 %indvar452        %t7 = load double, ptr %t6453        %t8 = fmul double %t7, 4.5454        store double %t8, ptr %t6455        %indvar.next = sub i64 %indvar, 1456        %exitcond = icmp eq i64 %indvar.next, 10457        br i1 %exitcond, label %return, label %loop458 459return:460        ret void461}462 463define void @yet_another_count_down(ptr %d, i64 %n) nounwind {464; CHECK-LABEL: yet_another_count_down:465; CHECK:       # %bb.0: # %entry466; CHECK-NEXT:    movq $-2040, %rax # imm = 0xF808467; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]468; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]469; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]470; CHECK-NEXT:    movq %rdi, %rcx471; CHECK-NEXT:    movq %rdi, %rdx472; CHECK-NEXT:    .p2align 4473; CHECK-NEXT:  .LBB8_1: # %loop474; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1475; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero476; CHECK-NEXT:    mulsd %xmm0, %xmm3477; CHECK-NEXT:    movsd %xmm3, 2040(%rdi,%rax)478; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero479; CHECK-NEXT:    mulsd %xmm1, %xmm3480; CHECK-NEXT:    movsd %xmm3, (%rcx)481; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero482; CHECK-NEXT:    mulsd %xmm2, %xmm3483; CHECK-NEXT:    movsd %xmm3, (%rdx)484; CHECK-NEXT:    addq $-8, %rdx485; CHECK-NEXT:    addq $134217720, %rcx # imm = 0x7FFFFF8486; CHECK-NEXT:    addq $2040, %rax # imm = 0x7F8487; CHECK-NEXT:    jne .LBB8_1488; CHECK-NEXT:  # %bb.2: # %return489; CHECK-NEXT:    retq490entry:491	br label %loop492 493loop:494	%indvar = phi i64 [ 0, %entry ], [ %indvar.next, %loop ]495	%indvar.i8 = and i64 %indvar, 255496	%t0 = getelementptr double, ptr %d, i64 %indvar.i8497	%t1 = load double, ptr %t0498	%t2 = fmul double %t1, 0.1499	store double %t2, ptr %t0500	%indvar.i24 = and i64 %indvar, 16777215501	%t3 = getelementptr double, ptr %d, i64 %indvar.i24502	%t4 = load double, ptr %t3503	%t5 = fmul double %t4, 2.3504	store double %t5, ptr %t3505	%t6 = getelementptr double, ptr %d, i64 %indvar506	%t7 = load double, ptr %t6507	%t8 = fmul double %t7, 4.5508	store double %t8, ptr %t6509	%indvar.next = sub i64 %indvar, 1510	%exitcond = icmp eq i64 %indvar.next, 18446744073709551615511	br i1 %exitcond, label %return, label %loop512 513return:514	ret void515}516 517define void @yet_another_count_up(ptr %d, i64 %n) nounwind {518; CHECK-LABEL: yet_another_count_up:519; CHECK:       # %bb.0: # %entry520; CHECK-NEXT:    xorl %eax, %eax521; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]522; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]523; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]524; CHECK-NEXT:    .p2align 4525; CHECK-NEXT:  .LBB9_1: # %loop526; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1527; CHECK-NEXT:    movzbl %al, %ecx528; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero529; CHECK-NEXT:    mulsd %xmm0, %xmm3530; CHECK-NEXT:    movsd %xmm3, (%rdi,%rcx,8)531; CHECK-NEXT:    movl %eax, %ecx532; CHECK-NEXT:    andl $16777215, %ecx # imm = 0xFFFFFF533; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero534; CHECK-NEXT:    mulsd %xmm1, %xmm3535; CHECK-NEXT:    movsd %xmm3, (%rdi,%rcx,8)536; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero537; CHECK-NEXT:    mulsd %xmm2, %xmm3538; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax,8)539; CHECK-NEXT:    addq $3, %rax540; CHECK-NEXT:    cmpq $10, %rax541; CHECK-NEXT:    jne .LBB9_1542; CHECK-NEXT:  # %bb.2: # %return543; CHECK-NEXT:    retq544entry:545        br label %loop546 547loop:548        %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %loop ]549        %indvar.i8 = and i64 %indvar, 255550        %t0 = getelementptr double, ptr %d, i64 %indvar.i8551        %t1 = load double, ptr %t0552        %t2 = fmul double %t1, 0.1553        store double %t2, ptr %t0554        %indvar.i24 = and i64 %indvar, 16777215555        %t3 = getelementptr double, ptr %d, i64 %indvar.i24556        %t4 = load double, ptr %t3557        %t5 = fmul double %t4, 2.3558        store double %t5, ptr %t3559        %t6 = getelementptr double, ptr %d, i64 %indvar560        %t7 = load double, ptr %t6561        %t8 = fmul double %t7, 4.5562        store double %t8, ptr %t6563        %indvar.next = add i64 %indvar, 3564        %exitcond = icmp eq i64 %indvar.next, 10565        br i1 %exitcond, label %return, label %loop566 567return:568        ret void569}570 571define void @still_another_count_down(ptr %d, i64 %n) nounwind {572; CHECK-LABEL: still_another_count_down:573; CHECK:       # %bb.0: # %entry574; CHECK-NEXT:    movl $10, %eax575; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]576; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]577; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]578; CHECK-NEXT:    .p2align 4579; CHECK-NEXT:  .LBB10_1: # %loop580; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1581; CHECK-NEXT:    movzbl %al, %ecx582; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero583; CHECK-NEXT:    mulsd %xmm0, %xmm3584; CHECK-NEXT:    movsd %xmm3, (%rdi,%rcx,8)585; CHECK-NEXT:    movl %eax, %ecx586; CHECK-NEXT:    andl $16777215, %ecx # imm = 0xFFFFFF587; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero588; CHECK-NEXT:    mulsd %xmm1, %xmm3589; CHECK-NEXT:    movsd %xmm3, (%rdi,%rcx,8)590; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero591; CHECK-NEXT:    mulsd %xmm2, %xmm3592; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax,8)593; CHECK-NEXT:    addq $-3, %rax594; CHECK-NEXT:    jne .LBB10_1595; CHECK-NEXT:  # %bb.2: # %return596; CHECK-NEXT:    retq597entry:598        br label %loop599 600loop:601        %indvar = phi i64 [ 10, %entry ], [ %indvar.next, %loop ]602        %indvar.i8 = and i64 %indvar, 255603        %t0 = getelementptr double, ptr %d, i64 %indvar.i8604        %t1 = load double, ptr %t0605        %t2 = fmul double %t1, 0.1606        store double %t2, ptr %t0607        %indvar.i24 = and i64 %indvar, 16777215608        %t3 = getelementptr double, ptr %d, i64 %indvar.i24609        %t4 = load double, ptr %t3610        %t5 = fmul double %t4, 2.3611        store double %t5, ptr %t3612        %t6 = getelementptr double, ptr %d, i64 %indvar613        %t7 = load double, ptr %t6614        %t8 = fmul double %t7, 4.5615        store double %t8, ptr %t6616        %indvar.next = sub i64 %indvar, 3617        %exitcond = icmp eq i64 %indvar.next, 0618        br i1 %exitcond, label %return, label %loop619 620return:621        ret void622}623 624define void @yet_another_count_up_signed(ptr %d, i64 %n) nounwind {625; CHECK-LABEL: yet_another_count_up_signed:626; CHECK:       # %bb.0: # %entry627; CHECK-NEXT:    movq $-10, %rax628; CHECK-NEXT:    xorl %ecx, %ecx629; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]630; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]631; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]632; CHECK-NEXT:    xorl %edx, %edx633; CHECK-NEXT:    .p2align 4634; CHECK-NEXT:  .LBB11_1: # %loop635; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1636; CHECK-NEXT:    movq %rcx, %rsi637; CHECK-NEXT:    sarq $8, %rsi638; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero639; CHECK-NEXT:    mulsd %xmm0, %xmm3640; CHECK-NEXT:    movsd %xmm3, (%rdi,%rsi,8)641; CHECK-NEXT:    movq %rdx, %rsi642; CHECK-NEXT:    sarq $24, %rsi643; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero644; CHECK-NEXT:    mulsd %xmm1, %xmm3645; CHECK-NEXT:    movsd %xmm3, (%rdi,%rsi,8)646; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero647; CHECK-NEXT:    mulsd %xmm2, %xmm3648; CHECK-NEXT:    movsd %xmm3, 80(%rdi,%rax,8)649; CHECK-NEXT:    addq $50331648, %rdx # imm = 0x3000000650; CHECK-NEXT:    addq $768, %rcx # imm = 0x300651; CHECK-NEXT:    addq $3, %rax652; CHECK-NEXT:    jne .LBB11_1653; CHECK-NEXT:  # %bb.2: # %return654; CHECK-NEXT:    retq655entry:656        br label %loop657 658loop:659        %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %loop ]660        %s0 = shl i64 %indvar, 8661        %indvar.i8 = ashr i64 %s0, 8662        %t0 = getelementptr double, ptr %d, i64 %indvar.i8663        %t1 = load double, ptr %t0664        %t2 = fmul double %t1, 0.1665        store double %t2, ptr %t0666        %s1 = shl i64 %indvar, 24667        %indvar.i24 = ashr i64 %s1, 24668        %t3 = getelementptr double, ptr %d, i64 %indvar.i24669        %t4 = load double, ptr %t3670        %t5 = fmul double %t4, 2.3671        store double %t5, ptr %t3672        %t6 = getelementptr double, ptr %d, i64 %indvar673        %t7 = load double, ptr %t6674        %t8 = fmul double %t7, 4.5675        store double %t8, ptr %t6676        %indvar.next = add i64 %indvar, 3677        %exitcond = icmp eq i64 %indvar.next, 10678        br i1 %exitcond, label %return, label %loop679 680return:681        ret void682}683 684define void @yet_another_count_down_signed(ptr %d, i64 %n) nounwind {685; CHECK-LABEL: yet_another_count_down_signed:686; CHECK:       # %bb.0: # %entry687; CHECK-NEXT:    movl $10, %eax688; CHECK-NEXT:    movl $167772160, %ecx # imm = 0xA000000689; CHECK-NEXT:    movl $2560, %edx # imm = 0xA00690; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]691; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]692; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]693; CHECK-NEXT:    .p2align 4694; CHECK-NEXT:  .LBB12_1: # %loop695; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1696; CHECK-NEXT:    movq %rdx, %rsi697; CHECK-NEXT:    sarq $8, %rsi698; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero699; CHECK-NEXT:    mulsd %xmm0, %xmm3700; CHECK-NEXT:    movsd %xmm3, (%rdi,%rsi,8)701; CHECK-NEXT:    movq %rcx, %rsi702; CHECK-NEXT:    sarq $24, %rsi703; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero704; CHECK-NEXT:    mulsd %xmm1, %xmm3705; CHECK-NEXT:    movsd %xmm3, (%rdi,%rsi,8)706; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero707; CHECK-NEXT:    mulsd %xmm2, %xmm3708; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax,8)709; CHECK-NEXT:    addq $-50331648, %rcx # imm = 0xFD000000710; CHECK-NEXT:    addq $-768, %rdx # imm = 0xFD00711; CHECK-NEXT:    addq $-3, %rax712; CHECK-NEXT:    jne .LBB12_1713; CHECK-NEXT:  # %bb.2: # %return714; CHECK-NEXT:    retq715entry:716        br label %loop717 718loop:719        %indvar = phi i64 [ 10, %entry ], [ %indvar.next, %loop ]720        %s0 = shl i64 %indvar, 8721        %indvar.i8 = ashr i64 %s0, 8722        %t0 = getelementptr double, ptr %d, i64 %indvar.i8723        %t1 = load double, ptr %t0724        %t2 = fmul double %t1, 0.1725        store double %t2, ptr %t0726        %s1 = shl i64 %indvar, 24727        %indvar.i24 = ashr i64 %s1, 24728        %t3 = getelementptr double, ptr %d, i64 %indvar.i24729        %t4 = load double, ptr %t3730        %t5 = fmul double %t4, 2.3731        store double %t5, ptr %t3732        %t6 = getelementptr double, ptr %d, i64 %indvar733        %t7 = load double, ptr %t6734        %t8 = fmul double %t7, 4.5735        store double %t8, ptr %t6736        %indvar.next = sub i64 %indvar, 3737        %exitcond = icmp eq i64 %indvar.next, 0738        br i1 %exitcond, label %return, label %loop739 740return:741        ret void742}743 744 745 746