کاهش قدرت
مثال  روش کاهش قدرت > بهینه سازی های دیگر

کامپایلر شروع به انجام بسیاری از بهینه سازی های دیگر خواهد کرد – نه تنها کاهش قدرت. عباراتی که ثابت (invariant) در یک حلقه خارج از حلقه  برافراشته(hoisted) هستند  . ثابت ها را می توان در خارج از هر دو حلقه قرار داد - مانند ثبات های اعشاری fr3 و fr4. تشخیص اینکه برخی از متغیرها تغییر نمی‌کنند ، امکان ادغام ثبات ها را فراهم می آورد. n ثابت است ، بنابراین r2، r4، r7، r12 می توان آن ها را برافراشت و یا  از بین برد. مقدار مشترک i * n در r8 و r13  (برافراشته)محاسبه می شود ، بنابراین آنها از بین می روند. درونی ترین حلقه (0120-0260) از 11 به 7 دستورالعمل میانی کاهش یافته است. تنها ضربی که در پایین ترین حلقه باقی مانده است ، ضرب 8  در خط 0210 است.
0010 ; for (i = 0, i < n; i++)
0020  {
0030   r1 = #0            ; i = 0
0050   load r2, n
0130 ;  load r4, n   killed; use r2
0180 ;  load r7, n   killed; use r2
0300 ;  load r12, n  killed; use r2
0220   fr3 = #0.0
0340   fr4 = #1.0
0040 G0000:
0060   cmp r1, r2           ; i < n
0070   bge G0001
0080
0190   r8 = r1 * r2         ; calculate subscript i * n
0310 ;  r13 = r1 * r2 killed; use r8  ; calculate subscript i * n
0090   ; for (j = 0; j < n; j++)
0100    {
0110      r3  = #0         ; j = 0
0120 G0002:
0140      cmp r3, r2        ; j < n
0150      bge G0003
0160
0170      ; A[i,j] = 0.0;
0200      r9 = r8 + r3       ; calculate subscript i * n + j
0210      r10 = r9 * #8       ; calculate byte address
0230      fstore fr3, A[r10]
0240
0250      r3 = r3 + #1       ; j++
0260      br G0002
0270    }
0280 G0003:
0290   ; A[i,i] = 1.0;
0320   r14 = r8 + r1         ; calculate subscript i * n + i
0330   r15 = r14 * #8         ; calculate byte address
0350   fstore fr4, A[r15]
0360
0370   ;i++
0380   r1 = r1 + #1
0390   br G0000
0400  }
0410 G0001:
برای بهینه سازی راه های بیشتری وجود دارد. ثبات r3 که متغیر اصلی  است در درونی ترین حلقه (0140-0260) است. هر بار از طریق حلقه 1 عدد افزایش می یابد. ثبات r8 (که در درونی ترین حلقه ،ثابت (invariant )است) به r3 اضافه می شود. به جای استفاده از r3 ، کامپایلر می تواند r3 را از بین ببرد و از r9 استفاده کند. حلقه به جای اینکه توسط r3 = 0 تا n-1 کنترل شود ، می تواند توسط r9 = r8 + 0 تا r8 + n-1 کنترل شود. این عملیات  چهار دستورالعمل را اضافه می کند و چهار دستورالعمل را از بین می برد ، اما اکنون  یک دستورالعمل کمتر در داخل حلقه وجود دارد.
0110 ;    r3  = #0   killed    ; j = 0
0115      r9  = r8         ; new assignment
0117      r20 = r8 + r2      ; new limit
0120 G0002:
0140 ;    cmp r3, r2  killed    ; j < n
0145      cmp r9, r20        ; r8 + j < r8 + n = r20
0150      bge G0003
0160
0170      ; A[i,j] = 0.0;
0200 ;    r9 = r8 + r3 killed    ; calculate subscript i * n + j
0210      r10 = r9 * #8       ; calculate byte address
0230      fstore fr3, A[r10]
0240
0250 ;    r3 = r3 + #1 killed    ; j++
0255      r9 = r9 + #1       ; new loop variable
0260      br G0002
اکنون r9 متغیر حلقه است ، ولی با ضرب 8 تعامل دارد. در اینجا ما می توانیم با روش  کاهش قدرت بهینه سازی انجام دهیم. ضرب در 8 را می توان به  جمع های  پی در پی  8 کاهش داد. اکنون هیچ ضرب در داخل حلقه وجود ندارد.
0115      r9  = r8         ; new assignment
0117      r20 = r8 + r2      ; new limit
0118      r10 = r8 * #8      ; initial value of r10
0120 G0002:
0145      cmp r9, r20        ; r8 + j < r8 + n = r20
0150      bge G0003
0160
0170      ; A[i,j] = 0.0;
0210 ;    r10 = r9 * #8  killed  ; calculate byte address
0230      fstore fr3, A[r10]
0240
0245      r10 = r10 + #8      ; strength reduced multiply
0255      r9 = r9 + #1       ; loop variable
0260      br G0002
ثبات های r9 و r10 (= 8 * r9) هر دو دیگر  مورد نیاز نیستند. r9 را می توان در داخل حلقه از بین برد. حلقه اکنون 5 دستورالعمل است.
0115 ;    r9  = r8     killed
0117      r20 = r8 + r2      ; limit
0118      r10 = r8 * #8      ; initial value of r10
0119      r22 = r20 * #8      ; new limit
0120 G0002:
0145 ;    cmp r9, r20    killed  ; r8 + j < r8 + n = r20
0147      cmp r10, r22       ; r10 = 8*(r8 + j) < 8*(r8 + n) = r22
0150      bge G0003
0160
0170      ; A[i,j] = 0.0;
0230      fstore fr3, A[r10]
0240
0245      r10 = r10 + #8      ; strength reduced multiply
0255 ;    r9 = r9 + #1   killed  ; loop variable
0260      br G0002