brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.7 KiB · 9d2d70d Raw
486 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2; RUN: llc -verify-machineinstrs -stop-after=finalize-isel -mtriple=powerpc64-ibm-aix-xcoff \3; RUN:   -mcpu=pwr4 < %s | FileCheck -check-prefix=AIX64 %s4; RUN: llc -verify-machineinstrs -stop-after=finalize-isel -mtriple=powerpc-ibm-aix-xcoff \5; RUN:   -mcpu=pwr4 < %s | FileCheck -check-prefix=AIX32 %s6; RUN: llc -verify-machineinstrs -stop-after=finalize-isel -mtriple=powerpc64le-unknown-linux-gnu \7; RUN:   -mcpu=pwr8 < %s | FileCheck -check-prefix=LE64 %s8 9;; This file is copied from test/CodeGen/PowerPC/ctrloops.ll.10;; In this file, we are testing the CTR loops form after ISEL.11 12@a = common global i32 0, align 413 14define void @test1(i32 %c) nounwind {15  ; AIX64-LABEL: name: test116  ; AIX64: bb.0.entry:17  ; AIX64-NEXT:   successors: %bb.1(0x80000000)18  ; AIX64-NEXT:   liveins: $x319  ; AIX64-NEXT: {{  $}}20  ; AIX64-NEXT:   [[COPY:%[0-9]+]]:g8rc = COPY $x321  ; AIX64-NEXT:   [[COPY1:%[0-9]+]]:gprc = COPY [[COPY]].sub_3222  ; AIX64-NEXT:   [[LI8_:%[0-9]+]]:g8rc = LI8 204823  ; AIX64-NEXT:   MTCTR8loop killed [[LI8_]], implicit-def dead $ctr824  ; AIX64-NEXT: {{  $}}25  ; AIX64-NEXT: bb.1.for.body:26  ; AIX64-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)27  ; AIX64-NEXT: {{  $}}28  ; AIX64-NEXT:   [[LDtoc:%[0-9]+]]:g8rc_and_g8rc_nox0 = LDtoc @a, $x2 :: (load (s64) from got)29  ; AIX64-NEXT:   [[LWZ:%[0-9]+]]:gprc = LWZ 0, [[LDtoc]] :: (volatile dereferenceable load (s32) from @a)30  ; AIX64-NEXT:   [[ADD4_:%[0-9]+]]:gprc = nsw ADD4 killed [[LWZ]], [[COPY1]]31  ; AIX64-NEXT:   STW killed [[ADD4_]], 0, [[LDtoc]] :: (volatile store (s32) into @a)32  ; AIX64-NEXT:   [[DecreaseCTR8loop:%[0-9]+]]:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr833  ; AIX64-NEXT:   BC killed [[DecreaseCTR8loop]], %bb.134  ; AIX64-NEXT:   B %bb.235  ; AIX64-NEXT: {{  $}}36  ; AIX64-NEXT: bb.2.for.end:37  ; AIX64-NEXT:   BLR8 implicit $lr8, implicit $rm38  ;39  ; AIX32-LABEL: name: test140  ; AIX32: bb.0.entry:41  ; AIX32-NEXT:   successors: %bb.1(0x80000000)42  ; AIX32-NEXT:   liveins: $r343  ; AIX32-NEXT: {{  $}}44  ; AIX32-NEXT:   [[COPY:%[0-9]+]]:gprc = COPY $r345  ; AIX32-NEXT:   [[LI:%[0-9]+]]:gprc = LI 204846  ; AIX32-NEXT:   MTCTRloop killed [[LI]], implicit-def dead $ctr47  ; AIX32-NEXT: {{  $}}48  ; AIX32-NEXT: bb.1.for.body:49  ; AIX32-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)50  ; AIX32-NEXT: {{  $}}51  ; AIX32-NEXT:   [[LWZtoc:%[0-9]+]]:gprc_and_gprc_nor0 = LWZtoc @a, $r2 :: (load (s32) from got)52  ; AIX32-NEXT:   [[LWZ:%[0-9]+]]:gprc = LWZ 0, [[LWZtoc]] :: (volatile dereferenceable load (s32) from @a)53  ; AIX32-NEXT:   [[ADD4_:%[0-9]+]]:gprc = nsw ADD4 killed [[LWZ]], [[COPY]]54  ; AIX32-NEXT:   STW killed [[ADD4_]], 0, [[LWZtoc]] :: (volatile store (s32) into @a)55  ; AIX32-NEXT:   [[DecreaseCTRloop:%[0-9]+]]:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr56  ; AIX32-NEXT:   BC killed [[DecreaseCTRloop]], %bb.157  ; AIX32-NEXT:   B %bb.258  ; AIX32-NEXT: {{  $}}59  ; AIX32-NEXT: bb.2.for.end:60  ; AIX32-NEXT:   BLR implicit $lr, implicit $rm61  ;62  ; LE64-LABEL: name: test163  ; LE64: bb.0.entry:64  ; LE64-NEXT:   successors: %bb.1(0x80000000)65  ; LE64-NEXT:   liveins: $x366  ; LE64-NEXT: {{  $}}67  ; LE64-NEXT:   [[COPY:%[0-9]+]]:g8rc = COPY $x368  ; LE64-NEXT:   [[COPY1:%[0-9]+]]:gprc = COPY [[COPY]].sub_3269  ; LE64-NEXT:   [[LI8_:%[0-9]+]]:g8rc = LI8 204870  ; LE64-NEXT:   MTCTR8loop killed [[LI8_]], implicit-def dead $ctr871  ; LE64-NEXT: {{  $}}72  ; LE64-NEXT: bb.1.for.body:73  ; LE64-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)74  ; LE64-NEXT: {{  $}}75  ; LE64-NEXT:   [[ADDIStocHA8_:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDIStocHA8 $x2, @a76  ; LE64-NEXT:   [[LDtocL:%[0-9]+]]:g8rc_and_g8rc_nox0 = LDtocL @a, killed [[ADDIStocHA8_]] :: (load (s64) from got)77  ; LE64-NEXT:   [[LWZ:%[0-9]+]]:gprc = LWZ 0, [[LDtocL]] :: (volatile dereferenceable load (s32) from @a)78  ; LE64-NEXT:   [[ADD4_:%[0-9]+]]:gprc = nsw ADD4 killed [[LWZ]], [[COPY1]]79  ; LE64-NEXT:   STW killed [[ADD4_]], 0, [[LDtocL]] :: (volatile store (s32) into @a)80  ; LE64-NEXT:   [[DecreaseCTR8loop:%[0-9]+]]:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr881  ; LE64-NEXT:   BC killed [[DecreaseCTR8loop]], %bb.182  ; LE64-NEXT:   B %bb.283  ; LE64-NEXT: {{  $}}84  ; LE64-NEXT: bb.2.for.end:85  ; LE64-NEXT:   BLR8 implicit $lr8, implicit $rm86entry:87  br label %for.body88 89for.body:                                         ; preds = %for.body, %entry90  %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]91  %0 = load volatile i32, ptr @a, align 492  %add = add nsw i32 %0, %c93  store volatile i32 %add, ptr @a, align 494  %inc = add nsw i32 %i.01, 195  %exitcond = icmp eq i32 %inc, 204896  br i1 %exitcond, label %for.end, label %for.body97 98for.end:                                          ; preds = %for.body99  ret void100}101 102define void @test2(i32 %c, i32 %d) nounwind {103  ; AIX64-LABEL: name: test2104  ; AIX64: bb.0.entry:105  ; AIX64-NEXT:   successors: %bb.1(0x50000000), %bb.3(0x30000000)106  ; AIX64-NEXT:   liveins: $x3, $x4107  ; AIX64-NEXT: {{  $}}108  ; AIX64-NEXT:   [[COPY:%[0-9]+]]:g8rc = COPY $x4109  ; AIX64-NEXT:   [[COPY1:%[0-9]+]]:g8rc = COPY $x3110  ; AIX64-NEXT:   [[COPY2:%[0-9]+]]:gprc = COPY [[COPY1]].sub_32111  ; AIX64-NEXT:   [[COPY3:%[0-9]+]]:gprc_and_gprc_nor0 = COPY [[COPY]].sub_32112  ; AIX64-NEXT:   [[CMPWI:%[0-9]+]]:crrc = CMPWI [[COPY3]], 1113  ; AIX64-NEXT:   BCC 12, killed [[CMPWI]], %bb.3114  ; AIX64-NEXT:   B %bb.1115  ; AIX64-NEXT: {{  $}}116  ; AIX64-NEXT: bb.1.for.body.preheader:117  ; AIX64-NEXT:   successors: %bb.2(0x80000000)118  ; AIX64-NEXT: {{  $}}119  ; AIX64-NEXT:   [[ADDI:%[0-9]+]]:gprc = ADDI [[COPY3]], -1120  ; AIX64-NEXT:   [[DEF:%[0-9]+]]:g8rc = IMPLICIT_DEF121  ; AIX64-NEXT:   [[INSERT_SUBREG:%[0-9]+]]:g8rc = INSERT_SUBREG [[DEF]], killed [[ADDI]], %subreg.sub_32122  ; AIX64-NEXT:   [[RLDICL:%[0-9]+]]:g8rc_and_g8rc_nox0 = RLDICL killed [[INSERT_SUBREG]], 0, 32123  ; AIX64-NEXT:   [[ADDI8_:%[0-9]+]]:g8rc = nuw nsw ADDI8 killed [[RLDICL]], 1124  ; AIX64-NEXT:   MTCTR8loop killed [[ADDI8_]], implicit-def dead $ctr8125  ; AIX64-NEXT: {{  $}}126  ; AIX64-NEXT: bb.2.for.body:127  ; AIX64-NEXT:   successors: %bb.2(0x7c000000), %bb.3(0x04000000)128  ; AIX64-NEXT: {{  $}}129  ; AIX64-NEXT:   [[LDtoc:%[0-9]+]]:g8rc_and_g8rc_nox0 = LDtoc @a, $x2 :: (load (s64) from got)130  ; AIX64-NEXT:   [[LWZ:%[0-9]+]]:gprc = LWZ 0, [[LDtoc]] :: (volatile dereferenceable load (s32) from @a)131  ; AIX64-NEXT:   [[ADD4_:%[0-9]+]]:gprc = nsw ADD4 killed [[LWZ]], [[COPY2]]132  ; AIX64-NEXT:   STW killed [[ADD4_]], 0, [[LDtoc]] :: (volatile store (s32) into @a)133  ; AIX64-NEXT:   [[DecreaseCTR8loop:%[0-9]+]]:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8134  ; AIX64-NEXT:   BC killed [[DecreaseCTR8loop]], %bb.2135  ; AIX64-NEXT:   B %bb.3136  ; AIX64-NEXT: {{  $}}137  ; AIX64-NEXT: bb.3.for.end:138  ; AIX64-NEXT:   BLR8 implicit $lr8, implicit $rm139  ;140  ; AIX32-LABEL: name: test2141  ; AIX32: bb.0.entry:142  ; AIX32-NEXT:   successors: %bb.1(0x50000000), %bb.3(0x30000000)143  ; AIX32-NEXT:   liveins: $r3, $r4144  ; AIX32-NEXT: {{  $}}145  ; AIX32-NEXT:   [[COPY:%[0-9]+]]:gprc = COPY $r4146  ; AIX32-NEXT:   [[COPY1:%[0-9]+]]:gprc = COPY $r3147  ; AIX32-NEXT:   [[CMPWI:%[0-9]+]]:crrc = CMPWI [[COPY]], 1148  ; AIX32-NEXT:   BCC 12, killed [[CMPWI]], %bb.3149  ; AIX32-NEXT:   B %bb.1150  ; AIX32-NEXT: {{  $}}151  ; AIX32-NEXT: bb.1.for.body.preheader:152  ; AIX32-NEXT:   successors: %bb.2(0x80000000)153  ; AIX32-NEXT: {{  $}}154  ; AIX32-NEXT:   MTCTRloop [[COPY]], implicit-def dead $ctr155  ; AIX32-NEXT: {{  $}}156  ; AIX32-NEXT: bb.2.for.body:157  ; AIX32-NEXT:   successors: %bb.2(0x7c000000), %bb.3(0x04000000)158  ; AIX32-NEXT: {{  $}}159  ; AIX32-NEXT:   [[LWZtoc:%[0-9]+]]:gprc_and_gprc_nor0 = LWZtoc @a, $r2 :: (load (s32) from got)160  ; AIX32-NEXT:   [[LWZ:%[0-9]+]]:gprc = LWZ 0, [[LWZtoc]] :: (volatile dereferenceable load (s32) from @a)161  ; AIX32-NEXT:   [[ADD4_:%[0-9]+]]:gprc = nsw ADD4 killed [[LWZ]], [[COPY1]]162  ; AIX32-NEXT:   STW killed [[ADD4_]], 0, [[LWZtoc]] :: (volatile store (s32) into @a)163  ; AIX32-NEXT:   [[DecreaseCTRloop:%[0-9]+]]:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr164  ; AIX32-NEXT:   BC killed [[DecreaseCTRloop]], %bb.2165  ; AIX32-NEXT:   B %bb.3166  ; AIX32-NEXT: {{  $}}167  ; AIX32-NEXT: bb.3.for.end:168  ; AIX32-NEXT:   BLR implicit $lr, implicit $rm169  ;170  ; LE64-LABEL: name: test2171  ; LE64: bb.0.entry:172  ; LE64-NEXT:   successors: %bb.1(0x50000000), %bb.3(0x30000000)173  ; LE64-NEXT:   liveins: $x3, $x4174  ; LE64-NEXT: {{  $}}175  ; LE64-NEXT:   [[COPY:%[0-9]+]]:g8rc = COPY $x4176  ; LE64-NEXT:   [[COPY1:%[0-9]+]]:g8rc = COPY $x3177  ; LE64-NEXT:   [[COPY2:%[0-9]+]]:gprc = COPY [[COPY1]].sub_32178  ; LE64-NEXT:   [[COPY3:%[0-9]+]]:gprc_and_gprc_nor0 = COPY [[COPY]].sub_32179  ; LE64-NEXT:   [[CMPWI:%[0-9]+]]:crrc = CMPWI [[COPY3]], 1180  ; LE64-NEXT:   BCC 12, killed [[CMPWI]], %bb.3181  ; LE64-NEXT:   B %bb.1182  ; LE64-NEXT: {{  $}}183  ; LE64-NEXT: bb.1.for.body.preheader:184  ; LE64-NEXT:   successors: %bb.2(0x80000000)185  ; LE64-NEXT: {{  $}}186  ; LE64-NEXT:   [[ADDI:%[0-9]+]]:gprc = ADDI [[COPY3]], -1187  ; LE64-NEXT:   [[DEF:%[0-9]+]]:g8rc = IMPLICIT_DEF188  ; LE64-NEXT:   [[INSERT_SUBREG:%[0-9]+]]:g8rc = INSERT_SUBREG [[DEF]], killed [[ADDI]], %subreg.sub_32189  ; LE64-NEXT:   [[RLDICL:%[0-9]+]]:g8rc_and_g8rc_nox0 = RLDICL killed [[INSERT_SUBREG]], 0, 32190  ; LE64-NEXT:   [[ADDI8_:%[0-9]+]]:g8rc = nuw nsw ADDI8 killed [[RLDICL]], 1191  ; LE64-NEXT:   MTCTR8loop killed [[ADDI8_]], implicit-def dead $ctr8192  ; LE64-NEXT: {{  $}}193  ; LE64-NEXT: bb.2.for.body:194  ; LE64-NEXT:   successors: %bb.2(0x7c000000), %bb.3(0x04000000)195  ; LE64-NEXT: {{  $}}196  ; LE64-NEXT:   [[ADDIStocHA8_:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDIStocHA8 $x2, @a197  ; LE64-NEXT:   [[LDtocL:%[0-9]+]]:g8rc_and_g8rc_nox0 = LDtocL @a, killed [[ADDIStocHA8_]] :: (load (s64) from got)198  ; LE64-NEXT:   [[LWZ:%[0-9]+]]:gprc = LWZ 0, [[LDtocL]] :: (volatile dereferenceable load (s32) from @a)199  ; LE64-NEXT:   [[ADD4_:%[0-9]+]]:gprc = nsw ADD4 killed [[LWZ]], [[COPY2]]200  ; LE64-NEXT:   STW killed [[ADD4_]], 0, [[LDtocL]] :: (volatile store (s32) into @a)201  ; LE64-NEXT:   [[DecreaseCTR8loop:%[0-9]+]]:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8202  ; LE64-NEXT:   BC killed [[DecreaseCTR8loop]], %bb.2203  ; LE64-NEXT:   B %bb.3204  ; LE64-NEXT: {{  $}}205  ; LE64-NEXT: bb.3.for.end:206  ; LE64-NEXT:   BLR8 implicit $lr8, implicit $rm207entry:208  %cmp1 = icmp sgt i32 %d, 0209  br i1 %cmp1, label %for.body, label %for.end210 211for.body:                                         ; preds = %entry, %for.body212  %i.02 = phi i32 [ %inc, %for.body ], [ 0, %entry ]213  %0 = load volatile i32, ptr @a, align 4214  %add = add nsw i32 %0, %c215  store volatile i32 %add, ptr @a, align 4216  %inc = add nsw i32 %i.02, 1217  %exitcond = icmp eq i32 %inc, %d218  br i1 %exitcond, label %for.end, label %for.body219 220for.end:                                          ; preds = %for.body, %entry221  ret void222}223 224define void @test3(i32 %c, i32 %d) nounwind {225  ; AIX64-LABEL: name: test3226  ; AIX64: bb.0.entry:227  ; AIX64-NEXT:   successors: %bb.1(0x50000000), %bb.3(0x30000000)228  ; AIX64-NEXT:   liveins: $x3, $x4229  ; AIX64-NEXT: {{  $}}230  ; AIX64-NEXT:   [[COPY:%[0-9]+]]:g8rc = COPY $x4231  ; AIX64-NEXT:   [[COPY1:%[0-9]+]]:g8rc = COPY $x3232  ; AIX64-NEXT:   [[COPY2:%[0-9]+]]:gprc = COPY [[COPY1]].sub_32233  ; AIX64-NEXT:   [[COPY3:%[0-9]+]]:gprc_and_gprc_nor0 = COPY [[COPY]].sub_32234  ; AIX64-NEXT:   [[CMPWI:%[0-9]+]]:crrc = CMPWI [[COPY3]], 1235  ; AIX64-NEXT:   BCC 12, killed [[CMPWI]], %bb.3236  ; AIX64-NEXT:   B %bb.1237  ; AIX64-NEXT: {{  $}}238  ; AIX64-NEXT: bb.1.for.body.preheader:239  ; AIX64-NEXT:   successors: %bb.2(0x80000000)240  ; AIX64-NEXT: {{  $}}241  ; AIX64-NEXT:   [[ADDI:%[0-9]+]]:gprc = ADDI [[COPY3]], -1242  ; AIX64-NEXT:   [[DEF:%[0-9]+]]:g8rc = IMPLICIT_DEF243  ; AIX64-NEXT:   [[INSERT_SUBREG:%[0-9]+]]:g8rc = INSERT_SUBREG [[DEF]], killed [[ADDI]], %subreg.sub_32244  ; AIX64-NEXT:   [[RLDICL:%[0-9]+]]:g8rc_and_g8rc_nox0 = RLDICL killed [[INSERT_SUBREG]], 0, 32245  ; AIX64-NEXT:   [[ADDI8_:%[0-9]+]]:g8rc = nuw nsw ADDI8 killed [[RLDICL]], 1246  ; AIX64-NEXT:   MTCTR8loop killed [[ADDI8_]], implicit-def dead $ctr8247  ; AIX64-NEXT:   [[LI:%[0-9]+]]:gprc = LI 0248  ; AIX64-NEXT: {{  $}}249  ; AIX64-NEXT: bb.2.for.body:250  ; AIX64-NEXT:   successors: %bb.2(0x7c000000), %bb.3(0x04000000)251  ; AIX64-NEXT: {{  $}}252  ; AIX64-NEXT:   [[PHI:%[0-9]+]]:gprc = PHI [[LI]], %bb.1, %1, %bb.2253  ; AIX64-NEXT:   [[LDtoc:%[0-9]+]]:g8rc_and_g8rc_nox0 = LDtoc @a, $x2 :: (load (s64) from got)254  ; AIX64-NEXT:   [[LWZ:%[0-9]+]]:gprc = LWZ 0, [[LDtoc]] :: (volatile dereferenceable load (s32) from @a)255  ; AIX64-NEXT:   [[ADD4_:%[0-9]+]]:gprc = ADD4 [[PHI]], killed [[LWZ]]256  ; AIX64-NEXT:   STW killed [[ADD4_]], 0, [[LDtoc]] :: (volatile store (s32) into @a)257  ; AIX64-NEXT:   [[ADD4_1:%[0-9]+]]:gprc = ADD4 [[PHI]], [[COPY2]]258  ; AIX64-NEXT:   [[DecreaseCTR8loop:%[0-9]+]]:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8259  ; AIX64-NEXT:   BC killed [[DecreaseCTR8loop]], %bb.2260  ; AIX64-NEXT:   B %bb.3261  ; AIX64-NEXT: {{  $}}262  ; AIX64-NEXT: bb.3.for.end:263  ; AIX64-NEXT:   BLR8 implicit $lr8, implicit $rm264  ;265  ; AIX32-LABEL: name: test3266  ; AIX32: bb.0.entry:267  ; AIX32-NEXT:   successors: %bb.1(0x50000000), %bb.3(0x30000000)268  ; AIX32-NEXT:   liveins: $r3, $r4269  ; AIX32-NEXT: {{  $}}270  ; AIX32-NEXT:   [[COPY:%[0-9]+]]:gprc = COPY $r4271  ; AIX32-NEXT:   [[COPY1:%[0-9]+]]:gprc = COPY $r3272  ; AIX32-NEXT:   [[CMPWI:%[0-9]+]]:crrc = CMPWI [[COPY]], 1273  ; AIX32-NEXT:   BCC 12, killed [[CMPWI]], %bb.3274  ; AIX32-NEXT:   B %bb.1275  ; AIX32-NEXT: {{  $}}276  ; AIX32-NEXT: bb.1.for.body.preheader:277  ; AIX32-NEXT:   successors: %bb.2(0x80000000)278  ; AIX32-NEXT: {{  $}}279  ; AIX32-NEXT:   MTCTRloop [[COPY]], implicit-def dead $ctr280  ; AIX32-NEXT:   [[LI:%[0-9]+]]:gprc = LI 0281  ; AIX32-NEXT: {{  $}}282  ; AIX32-NEXT: bb.2.for.body:283  ; AIX32-NEXT:   successors: %bb.2(0x7c000000), %bb.3(0x04000000)284  ; AIX32-NEXT: {{  $}}285  ; AIX32-NEXT:   [[PHI:%[0-9]+]]:gprc = PHI [[LI]], %bb.1, %1, %bb.2286  ; AIX32-NEXT:   [[LWZtoc:%[0-9]+]]:gprc_and_gprc_nor0 = LWZtoc @a, $r2 :: (load (s32) from got)287  ; AIX32-NEXT:   [[LWZ:%[0-9]+]]:gprc = LWZ 0, [[LWZtoc]] :: (volatile dereferenceable load (s32) from @a)288  ; AIX32-NEXT:   [[ADD4_:%[0-9]+]]:gprc = ADD4 [[PHI]], killed [[LWZ]]289  ; AIX32-NEXT:   STW killed [[ADD4_]], 0, [[LWZtoc]] :: (volatile store (s32) into @a)290  ; AIX32-NEXT:   [[ADD4_1:%[0-9]+]]:gprc = ADD4 [[PHI]], [[COPY1]]291  ; AIX32-NEXT:   [[DecreaseCTRloop:%[0-9]+]]:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr292  ; AIX32-NEXT:   BC killed [[DecreaseCTRloop]], %bb.2293  ; AIX32-NEXT:   B %bb.3294  ; AIX32-NEXT: {{  $}}295  ; AIX32-NEXT: bb.3.for.end:296  ; AIX32-NEXT:   BLR implicit $lr, implicit $rm297  ;298  ; LE64-LABEL: name: test3299  ; LE64: bb.0.entry:300  ; LE64-NEXT:   successors: %bb.1(0x50000000), %bb.3(0x30000000)301  ; LE64-NEXT:   liveins: $x3, $x4302  ; LE64-NEXT: {{  $}}303  ; LE64-NEXT:   [[COPY:%[0-9]+]]:g8rc = COPY $x4304  ; LE64-NEXT:   [[COPY1:%[0-9]+]]:g8rc = COPY $x3305  ; LE64-NEXT:   [[COPY2:%[0-9]+]]:gprc = COPY [[COPY1]].sub_32306  ; LE64-NEXT:   [[COPY3:%[0-9]+]]:gprc_and_gprc_nor0 = COPY [[COPY]].sub_32307  ; LE64-NEXT:   [[CMPWI:%[0-9]+]]:crrc = CMPWI [[COPY3]], 1308  ; LE64-NEXT:   BCC 12, killed [[CMPWI]], %bb.3309  ; LE64-NEXT:   B %bb.1310  ; LE64-NEXT: {{  $}}311  ; LE64-NEXT: bb.1.for.body.preheader:312  ; LE64-NEXT:   successors: %bb.2(0x80000000)313  ; LE64-NEXT: {{  $}}314  ; LE64-NEXT:   [[ADDI:%[0-9]+]]:gprc = ADDI [[COPY3]], -1315  ; LE64-NEXT:   [[DEF:%[0-9]+]]:g8rc = IMPLICIT_DEF316  ; LE64-NEXT:   [[INSERT_SUBREG:%[0-9]+]]:g8rc = INSERT_SUBREG [[DEF]], killed [[ADDI]], %subreg.sub_32317  ; LE64-NEXT:   [[RLDICL:%[0-9]+]]:g8rc_and_g8rc_nox0 = RLDICL killed [[INSERT_SUBREG]], 0, 32318  ; LE64-NEXT:   [[ADDI8_:%[0-9]+]]:g8rc = nuw nsw ADDI8 killed [[RLDICL]], 1319  ; LE64-NEXT:   MTCTR8loop killed [[ADDI8_]], implicit-def dead $ctr8320  ; LE64-NEXT:   [[LI:%[0-9]+]]:gprc = LI 0321  ; LE64-NEXT: {{  $}}322  ; LE64-NEXT: bb.2.for.body:323  ; LE64-NEXT:   successors: %bb.2(0x7c000000), %bb.3(0x04000000)324  ; LE64-NEXT: {{  $}}325  ; LE64-NEXT:   [[PHI:%[0-9]+]]:gprc = PHI [[LI]], %bb.1, %1, %bb.2326  ; LE64-NEXT:   [[ADDIStocHA8_:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDIStocHA8 $x2, @a327  ; LE64-NEXT:   [[LDtocL:%[0-9]+]]:g8rc_and_g8rc_nox0 = LDtocL @a, killed [[ADDIStocHA8_]] :: (load (s64) from got)328  ; LE64-NEXT:   [[LWZ:%[0-9]+]]:gprc = LWZ 0, [[LDtocL]] :: (volatile dereferenceable load (s32) from @a)329  ; LE64-NEXT:   [[ADD4_:%[0-9]+]]:gprc = ADD4 [[PHI]], killed [[LWZ]]330  ; LE64-NEXT:   STW killed [[ADD4_]], 0, [[LDtocL]] :: (volatile store (s32) into @a)331  ; LE64-NEXT:   [[ADD4_1:%[0-9]+]]:gprc = ADD4 [[PHI]], [[COPY2]]332  ; LE64-NEXT:   [[DecreaseCTR8loop:%[0-9]+]]:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8333  ; LE64-NEXT:   BC killed [[DecreaseCTR8loop]], %bb.2334  ; LE64-NEXT:   B %bb.3335  ; LE64-NEXT: {{  $}}336  ; LE64-NEXT: bb.3.for.end:337  ; LE64-NEXT:   BLR8 implicit $lr8, implicit $rm338entry:339  %cmp1 = icmp sgt i32 %d, 0340  br i1 %cmp1, label %for.body, label %for.end341 342for.body:                                         ; preds = %entry, %for.body343  %i.02 = phi i32 [ %inc, %for.body ], [ 0, %entry ]344  %mul = mul nsw i32 %i.02, %c345  %0 = load volatile i32, ptr @a, align 4346  %add = add nsw i32 %0, %mul347  store volatile i32 %add, ptr @a, align 4348  %inc = add nsw i32 %i.02, 1349  %exitcond = icmp eq i32 %inc, %d350  br i1 %exitcond, label %for.end, label %for.body351 352for.end:                                          ; preds = %for.body, %entry353  ret void354}355 356@tls_var = external thread_local global i8357 358define i32 @test4(i32 %inp) {359  ; AIX64-LABEL: name: test4360  ; AIX64: bb.0.entry:361  ; AIX64-NEXT:   successors: %bb.3(0x40000000), %bb.4(0x40000000)362  ; AIX64-NEXT:   liveins: $x3363  ; AIX64-NEXT: {{  $}}364  ; AIX64-NEXT:   [[COPY:%[0-9]+]]:g8rc = COPY $x3365  ; AIX64-NEXT:   [[COPY1:%[0-9]+]]:gprc_and_gprc_nor0 = COPY [[COPY]].sub_32366  ; AIX64-NEXT:   [[CMPWI:%[0-9]+]]:crrc = CMPWI [[COPY1]], 1367  ; AIX64-NEXT:   [[LI:%[0-9]+]]:gprc_and_gprc_nor0 = LI 1368  ; AIX64-NEXT:   BCC 12, [[CMPWI]], %bb.4369  ; AIX64-NEXT: {{  $}}370  ; AIX64-NEXT: bb.3.entry:371  ; AIX64-NEXT:   successors: %bb.4(0x80000000)372  ; AIX64-NEXT: {{  $}}373  ; AIX64-NEXT: bb.4.entry:374  ; AIX64-NEXT:   successors: %bb.1(0x80000000)375  ; AIX64-NEXT: {{  $}}376  ; AIX64-NEXT:   [[PHI:%[0-9]+]]:gprc = PHI [[LI]], %bb.3, [[COPY1]], %bb.0377  ; AIX64-NEXT:   [[SUBF:%[0-9]+]]:gprc = SUBF [[PHI]], [[COPY1]]378  ; AIX64-NEXT:   [[DEF:%[0-9]+]]:g8rc = IMPLICIT_DEF379  ; AIX64-NEXT:   [[INSERT_SUBREG:%[0-9]+]]:g8rc = INSERT_SUBREG [[DEF]], killed [[SUBF]], %subreg.sub_32380  ; AIX64-NEXT:   [[RLDICL:%[0-9]+]]:g8rc_and_g8rc_nox0 = RLDICL killed [[INSERT_SUBREG]], 0, 32381  ; AIX64-NEXT:   [[ADDI8_:%[0-9]+]]:g8rc = nuw nsw ADDI8 killed [[RLDICL]], 1382  ; AIX64-NEXT:   MTCTR8loop killed [[ADDI8_]], implicit-def dead $ctr8383  ; AIX64-NEXT: {{  $}}384  ; AIX64-NEXT: bb.1.for.body:385  ; AIX64-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)386  ; AIX64-NEXT: {{  $}}387  ; AIX64-NEXT:   [[DecreaseCTR8loop:%[0-9]+]]:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8388  ; AIX64-NEXT:   BC killed [[DecreaseCTR8loop]], %bb.1389  ; AIX64-NEXT:   B %bb.2390  ; AIX64-NEXT: {{  $}}391  ; AIX64-NEXT: bb.2.return:392  ; AIX64-NEXT:   [[LDtoc:%[0-9]+]]:g8rc = LDtoc target-flags(ppc-tlsgdm) @tls_var, $x2 :: (load (s64) from got)393  ; AIX64-NEXT:   [[LDtoc1:%[0-9]+]]:g8rc = LDtoc target-flags(ppc-tlsgd) @tls_var, $x2 :: (load (s64) from got)394  ; AIX64-NEXT:   [[TLSGDAIX8_:%[0-9]+]]:g8rc = TLSGDAIX8 killed [[LDtoc1]], killed [[LDtoc]]395  ; AIX64-NEXT:   [[COPY2:%[0-9]+]]:gprc = COPY [[TLSGDAIX8_]].sub_32396  ; AIX64-NEXT:   [[ADD4_:%[0-9]+]]:gprc = ADD4 killed [[COPY2]], [[PHI]]397  ; AIX64-NEXT:   [[DEF1:%[0-9]+]]:g8rc = IMPLICIT_DEF398  ; AIX64-NEXT:   [[INSERT_SUBREG1:%[0-9]+]]:g8rc = INSERT_SUBREG [[DEF1]], killed [[ADD4_]], %subreg.sub_32399  ; AIX64-NEXT:   $x3 = COPY [[INSERT_SUBREG1]]400  ; AIX64-NEXT:   BLR8 implicit $lr8, implicit $rm, implicit $x3401  ;402  ; AIX32-LABEL: name: test4403  ; AIX32: bb.0.entry:404  ; AIX32-NEXT:   successors: %bb.3(0x40000000), %bb.4(0x40000000)405  ; AIX32-NEXT:   liveins: $r3406  ; AIX32-NEXT: {{  $}}407  ; AIX32-NEXT:   [[COPY:%[0-9]+]]:gprc_and_gprc_nor0 = COPY $r3408  ; AIX32-NEXT:   [[CMPWI:%[0-9]+]]:crrc = CMPWI [[COPY]], 1409  ; AIX32-NEXT:   [[LI:%[0-9]+]]:gprc_and_gprc_nor0 = LI 1410  ; AIX32-NEXT:   BCC 12, [[CMPWI]], %bb.4411  ; AIX32-NEXT: {{  $}}412  ; AIX32-NEXT: bb.3.entry:413  ; AIX32-NEXT:   successors: %bb.4(0x80000000)414  ; AIX32-NEXT: {{  $}}415  ; AIX32-NEXT: bb.4.entry:416  ; AIX32-NEXT:   successors: %bb.1(0x80000000)417  ; AIX32-NEXT: {{  $}}418  ; AIX32-NEXT:   [[PHI:%[0-9]+]]:gprc = PHI [[LI]], %bb.3, [[COPY]], %bb.0419  ; AIX32-NEXT:   [[SUBF:%[0-9]+]]:gprc_and_gprc_nor0 = SUBF [[PHI]], [[COPY]]420  ; AIX32-NEXT:   [[ADDI:%[0-9]+]]:gprc = ADDI killed [[SUBF]], 1421  ; AIX32-NEXT:   MTCTRloop killed [[ADDI]], implicit-def dead $ctr422  ; AIX32-NEXT: {{  $}}423  ; AIX32-NEXT: bb.1.for.body:424  ; AIX32-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)425  ; AIX32-NEXT: {{  $}}426  ; AIX32-NEXT:   [[DecreaseCTRloop:%[0-9]+]]:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr427  ; AIX32-NEXT:   BC killed [[DecreaseCTRloop]], %bb.1428  ; AIX32-NEXT:   B %bb.2429  ; AIX32-NEXT: {{  $}}430  ; AIX32-NEXT: bb.2.return:431  ; AIX32-NEXT:   [[LWZtoc:%[0-9]+]]:gprc = LWZtoc target-flags(ppc-tlsgdm) @tls_var, $r2 :: (load (s32) from got)432  ; AIX32-NEXT:   [[LWZtoc1:%[0-9]+]]:gprc = LWZtoc target-flags(ppc-tlsgd) @tls_var, $r2 :: (load (s32) from got)433  ; AIX32-NEXT:   [[TLSGDAIX:%[0-9]+]]:gprc = TLSGDAIX killed [[LWZtoc1]], killed [[LWZtoc]]434  ; AIX32-NEXT:   [[ADD4_:%[0-9]+]]:gprc = ADD4 killed [[TLSGDAIX]], [[PHI]]435  ; AIX32-NEXT:   $r3 = COPY [[ADD4_]]436  ; AIX32-NEXT:   BLR implicit $lr, implicit $rm, implicit $r3437  ;438  ; LE64-LABEL: name: test4439  ; LE64: bb.0.entry:440  ; LE64-NEXT:   successors: %bb.1(0x80000000)441  ; LE64-NEXT:   liveins: $x3442  ; LE64-NEXT: {{  $}}443  ; LE64-NEXT:   [[COPY:%[0-9]+]]:g8rc = COPY $x3444  ; LE64-NEXT:   [[COPY1:%[0-9]+]]:gprc_and_gprc_nor0 = COPY [[COPY]].sub_32445  ; LE64-NEXT:   [[CMPWI:%[0-9]+]]:crrc = CMPWI [[COPY1]], 1446  ; LE64-NEXT:   [[LI:%[0-9]+]]:gprc_and_gprc_nor0 = LI 1447  ; LE64-NEXT:   [[ISEL:%[0-9]+]]:gprc = ISEL [[COPY1]], [[LI]], [[CMPWI]].sub_lt448  ; LE64-NEXT:   [[SUBF:%[0-9]+]]:gprc = SUBF [[ISEL]], [[COPY1]]449  ; LE64-NEXT:   [[DEF:%[0-9]+]]:g8rc = IMPLICIT_DEF450  ; LE64-NEXT:   [[INSERT_SUBREG:%[0-9]+]]:g8rc = INSERT_SUBREG [[DEF]], killed [[SUBF]], %subreg.sub_32451  ; LE64-NEXT:   [[RLDICL:%[0-9]+]]:g8rc_and_g8rc_nox0 = RLDICL killed [[INSERT_SUBREG]], 0, 32452  ; LE64-NEXT:   [[ADDI8_:%[0-9]+]]:g8rc = nuw nsw ADDI8 killed [[RLDICL]], 1453  ; LE64-NEXT:   MTCTR8loop killed [[ADDI8_]], implicit-def dead $ctr8454  ; LE64-NEXT: {{  $}}455  ; LE64-NEXT: bb.1.for.body:456  ; LE64-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)457  ; LE64-NEXT: {{  $}}458  ; LE64-NEXT:   [[DecreaseCTR8loop:%[0-9]+]]:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8459  ; LE64-NEXT:   BC killed [[DecreaseCTR8loop]], %bb.1460  ; LE64-NEXT:   B %bb.2461  ; LE64-NEXT: {{  $}}462  ; LE64-NEXT: bb.2.return:463  ; LE64-NEXT:   [[ADDISgotTprelHA:%[0-9]+]]:g8rc_and_g8rc_nox0 = ADDISgotTprelHA $x2, @tls_var464  ; LE64-NEXT:   [[LDgotTprelL:%[0-9]+]]:g8rc_and_g8rc_nox0 = LDgotTprelL @tls_var, killed [[ADDISgotTprelHA]]465  ; LE64-NEXT:   [[ADD8TLS:%[0-9]+]]:g8rc = ADD8TLS killed [[LDgotTprelL]], target-flags(ppc-tls) @tls_var466  ; LE64-NEXT:   [[COPY2:%[0-9]+]]:gprc = COPY [[ADD8TLS]].sub_32467  ; LE64-NEXT:   [[ADD4_:%[0-9]+]]:gprc = ADD4 killed [[COPY2]], [[ISEL]]468  ; LE64-NEXT:   [[DEF1:%[0-9]+]]:g8rc = IMPLICIT_DEF469  ; LE64-NEXT:   [[INSERT_SUBREG1:%[0-9]+]]:g8rc = INSERT_SUBREG [[DEF1]], killed [[ADD4_]], %subreg.sub_32470  ; LE64-NEXT:   $x3 = COPY [[INSERT_SUBREG1]]471  ; LE64-NEXT:   BLR8 implicit $lr8, implicit $rm, implicit $x3472entry:473  br label %for.body474 475for.body:                                         ; preds = %for.body, %entry476  %phi = phi i32 [ %dec, %for.body ], [ %inp, %entry ]477  %load = ptrtoint ptr @tls_var to i32478  %val = add i32 %load, %phi479  %dec = add i32 %phi, -1480  %cmp = icmp sgt i32 %phi, 1481  br i1 %cmp, label %for.body, label %return482 483return:                                           ; preds = %for.body484  ret i32 %val485}486