extern int p(int); static int ffor(void) { int i; for (int i = 0; i < 10; i++) { if (!p(i)) return 0; } return 1; } static int fwhile(void) { int i = 0; while (i < 10) { if (!p(i)) return 0; i++; } return 1; } static int fdo(void) { int i = 0; do { if (!p(i)) return 0; } while (i++ < 10); return 1; } /* * check-name: loop-linearization * check-command: test-linearize $file * * check-output-start ffor: .L0: phisrc.32 %phi5(i) <- $0 br .L4 .L4: phi.32 %r1(i) <- %phi5(i), %phi6(i) setlt.32 %r2 <- %r1(i), $10 cbr %r2, .L1, .L3 .L1: call.32 %r4 <- p, %r1(i) cbr %r4, .L2, .L5 .L5: phisrc.32 %phi1(return) <- $0 br .L7 .L2: add.32 %r7 <- %r1(i), $1 phisrc.32 %phi6(i) <- %r7 br .L4 .L3: phisrc.32 %phi2(return) <- $1 br .L7 .L7: phi.32 %r5 <- %phi1(return), %phi2(return) ret.32 %r5 fwhile: .L8: phisrc.32 %phi11(i) <- $0 br .L12 .L12: phi.32 %r8(i) <- %phi11(i), %phi12(i) setlt.32 %r9 <- %r8(i), $10 cbr %r9, .L9, .L11 .L9: call.32 %r11 <- p, %r8(i) cbr %r11, .L14, .L13 .L13: phisrc.32 %phi7(return) <- $0 br .L15 .L14: add.32 %r14 <- %r8(i), $1 phisrc.32 %phi12(i) <- %r14 br .L12 .L11: phisrc.32 %phi8(return) <- $1 br .L15 .L15: phi.32 %r12 <- %phi7(return), %phi8(return) ret.32 %r12 fdo: .L16: phisrc.32 %phi16(i) <- $0 br .L17 .L17: phi.32 %r15(i) <- %phi16(i), %phi17(i) call.32 %r16 <- p, %r15(i) cbr %r16, .L18, .L20 .L20: phisrc.32 %phi13(return) <- $0 br .L22 .L18: add.32 %r19 <- %r15(i), $1 setlt.32 %r20 <- %r15(i), $10 phisrc.32 %phi17(i) <- %r19 cbr %r20, .L17, .L19 .L19: phisrc.32 %phi14(return) <- $1 br .L22 .L22: phi.32 %r17 <- %phi13(return), %phi14(return) ret.32 %r17 * check-output-end */