diff options
Diffstat (limited to 'validation/linear')
| -rw-r--r-- | validation/linear/logical-phi0.c | 48 | ||||
| -rw-r--r-- | validation/linear/logical.c | 180 | ||||
| -rw-r--r-- | validation/linear/phi-order01.c | 16 | ||||
| -rw-r--r-- | validation/linear/phi-order02.c | 16 | ||||
| -rw-r--r-- | validation/linear/phi-order03.c | 8 | ||||
| -rw-r--r-- | validation/linear/phi-order04.c | 12 | ||||
| -rw-r--r-- | validation/linear/unreachable-label0.c | 19 |
7 files changed, 209 insertions, 90 deletions
diff --git a/validation/linear/logical-phi0.c b/validation/linear/logical-phi0.c new file mode 100644 index 00000000..96a47dba --- /dev/null +++ b/validation/linear/logical-phi0.c @@ -0,0 +1,48 @@ +int a(void); +int b(void); +int c(void); + +static int laa(void) +{ + return (a() && b()) && c(); +} + +static int lao(void) +{ + return (a() && b()) || c(); +} + +static int loa(void) +{ + return (a() || b()) && c(); +} + +static int loo(void) +{ + return (a() || b()) || c(); +} + +static int raa(void) +{ + return a() && (b() && c()); +} + +static int rao(void) +{ + return a() && (b() || c()); +} + +static int roa(void) +{ + return a() || (b() && c()); +} + +static int roo(void) +{ + return a() || (b() || c()); +} + +/* + * check-name: bad-logical-phi0 + * check-command: sparse -vir -flinearize=last $file + */ diff --git a/validation/linear/logical.c b/validation/linear/logical.c index 0f502c6b..b190f608 100644 --- a/validation/linear/logical.c +++ b/validation/linear/logical.c @@ -26,24 +26,24 @@ os: <entry-point> store.32 %arg1 -> 0[i] store.64 %arg2 -> 0[b] + load.32 %r2 <- 0[i] + setne.1 %r3 <- %r2, $0 phisrc.32 %phi1 <- $1 - load.32 %r1 <- 0[i] - setne.1 %r2 <- %r1, $0 - cbr %r2, .L3, .L2 + cbr %r3, .L3, .L2 .L2: - load.64 %r3 <- 0[b] - load.32 %r4 <- 0[%r3] - lsr.32 %r5 <- %r4, $1 - trunc.2 %r6 <- (32) %r5 - setne.1 %r7 <- %r6, $0 - zext.32 %r8 <- (1) %r7 - phisrc.32 %phi2 <- %r8 + load.64 %r4 <- 0[b] + load.32 %r5 <- 0[%r4] + lsr.32 %r6 <- %r5, $1 + trunc.2 %r7 <- (32) %r6 + setne.1 %r8 <- %r7, $0 + zext.32 %r9 <- (1) %r8 + phisrc.32 %phi2 <- %r9 br .L3 .L3: - phi.32 %r9 <- %phi1, %phi2 - phisrc.32 %phi3(return) <- %r9 + phi.32 %r1 <- %phi1, %phi2 + phisrc.32 %phi3(return) <- %r1 br .L1 .L1: @@ -56,24 +56,24 @@ ou: <entry-point> store.32 %arg1 -> 0[i] store.64 %arg2 -> 0[b] + load.32 %r12 <- 0[i] + setne.1 %r13 <- %r12, $0 phisrc.32 %phi4 <- $1 - load.32 %r11 <- 0[i] - setne.1 %r12 <- %r11, $0 - cbr %r12, .L7, .L6 + cbr %r13, .L7, .L6 .L6: - load.64 %r13 <- 0[b] - load.32 %r14 <- 0[%r13] - lsr.32 %r15 <- %r14, $3 - trunc.3 %r16 <- (32) %r15 - setne.1 %r17 <- %r16, $0 - zext.32 %r18 <- (1) %r17 - phisrc.32 %phi5 <- %r18 + load.64 %r14 <- 0[b] + load.32 %r15 <- 0[%r14] + lsr.32 %r16 <- %r15, $3 + trunc.3 %r17 <- (32) %r16 + setne.1 %r18 <- %r17, $0 + zext.32 %r19 <- (1) %r18 + phisrc.32 %phi5 <- %r19 br .L7 .L7: - phi.32 %r19 <- %phi4, %phi5 - phisrc.32 %phi6(return) <- %r19 + phi.32 %r11 <- %phi4, %phi5 + phisrc.32 %phi6(return) <- %r11 br .L5 .L5: @@ -86,22 +86,22 @@ ol: <entry-point> store.32 %arg1 -> 0[i] store.64 %arg2 -> 0[b] + load.32 %r22 <- 0[i] + setne.1 %r23 <- %r22, $0 phisrc.32 %phi7 <- $1 - load.32 %r21 <- 0[i] - setne.1 %r22 <- %r21, $0 - cbr %r22, .L11, .L10 + cbr %r23, .L11, .L10 .L10: - load.64 %r23 <- 0[b] - load.64 %r24 <- 8[%r23] - setne.1 %r25 <- %r24, $0 - zext.32 %r26 <- (1) %r25 - phisrc.32 %phi8 <- %r26 + load.64 %r24 <- 0[b] + load.64 %r25 <- 8[%r24] + setne.1 %r26 <- %r25, $0 + zext.32 %r27 <- (1) %r26 + phisrc.32 %phi8 <- %r27 br .L11 .L11: - phi.32 %r27 <- %phi7, %phi8 - phisrc.32 %phi9(return) <- %r27 + phi.32 %r21 <- %phi7, %phi8 + phisrc.32 %phi9(return) <- %r21 br .L9 .L9: @@ -114,23 +114,23 @@ od: <entry-point> store.32 %arg1 -> 0[i] store.64 %arg2 -> 0[b] + load.32 %r30 <- 0[i] + setne.1 %r31 <- %r30, $0 phisrc.32 %phi10 <- $1 - load.32 %r29 <- 0[i] - setne.1 %r30 <- %r29, $0 - cbr %r30, .L15, .L14 + cbr %r31, .L15, .L14 .L14: - load.64 %r31 <- 0[b] - load.64 %r32 <- 16[%r31] - setfval.64 %r33 <- 0.000000e+00 - fcmpune.1 %r34 <- %r32, %r33 - zext.32 %r35 <- (1) %r34 - phisrc.32 %phi11 <- %r35 + load.64 %r32 <- 0[b] + load.64 %r33 <- 16[%r32] + setfval.64 %r34 <- 0.000000e+00 + fcmpune.1 %r35 <- %r33, %r34 + zext.32 %r36 <- (1) %r35 + phisrc.32 %phi11 <- %r36 br .L15 .L15: - phi.32 %r36 <- %phi10, %phi11 - phisrc.32 %phi12(return) <- %r36 + phi.32 %r29 <- %phi10, %phi11 + phisrc.32 %phi12(return) <- %r29 br .L13 .L13: @@ -143,24 +143,24 @@ as: <entry-point> store.32 %arg1 -> 0[i] store.64 %arg2 -> 0[b] + load.32 %r39 <- 0[i] + setne.1 %r40 <- %r39, $0 phisrc.32 %phi13 <- $0 - load.32 %r38 <- 0[i] - setne.1 %r39 <- %r38, $0 - cbr %r39, .L18, .L19 + cbr %r40, .L18, .L19 .L18: - load.64 %r40 <- 0[b] - load.32 %r41 <- 0[%r40] - lsr.32 %r42 <- %r41, $1 - trunc.2 %r43 <- (32) %r42 - setne.1 %r44 <- %r43, $0 - zext.32 %r45 <- (1) %r44 - phisrc.32 %phi14 <- %r45 + load.64 %r41 <- 0[b] + load.32 %r42 <- 0[%r41] + lsr.32 %r43 <- %r42, $1 + trunc.2 %r44 <- (32) %r43 + setne.1 %r45 <- %r44, $0 + zext.32 %r46 <- (1) %r45 + phisrc.32 %phi14 <- %r46 br .L19 .L19: - phi.32 %r46 <- %phi14, %phi13 - phisrc.32 %phi15(return) <- %r46 + phi.32 %r38 <- %phi13, %phi14 + phisrc.32 %phi15(return) <- %r38 br .L17 .L17: @@ -173,24 +173,24 @@ au: <entry-point> store.32 %arg1 -> 0[i] store.64 %arg2 -> 0[b] + load.32 %r49 <- 0[i] + setne.1 %r50 <- %r49, $0 phisrc.32 %phi16 <- $0 - load.32 %r48 <- 0[i] - setne.1 %r49 <- %r48, $0 - cbr %r49, .L22, .L23 + cbr %r50, .L22, .L23 .L22: - load.64 %r50 <- 0[b] - load.32 %r51 <- 0[%r50] - lsr.32 %r52 <- %r51, $3 - trunc.3 %r53 <- (32) %r52 - setne.1 %r54 <- %r53, $0 - zext.32 %r55 <- (1) %r54 - phisrc.32 %phi17 <- %r55 + load.64 %r51 <- 0[b] + load.32 %r52 <- 0[%r51] + lsr.32 %r53 <- %r52, $3 + trunc.3 %r54 <- (32) %r53 + setne.1 %r55 <- %r54, $0 + zext.32 %r56 <- (1) %r55 + phisrc.32 %phi17 <- %r56 br .L23 .L23: - phi.32 %r56 <- %phi17, %phi16 - phisrc.32 %phi18(return) <- %r56 + phi.32 %r48 <- %phi16, %phi17 + phisrc.32 %phi18(return) <- %r48 br .L21 .L21: @@ -203,22 +203,22 @@ al: <entry-point> store.32 %arg1 -> 0[i] store.64 %arg2 -> 0[b] + load.32 %r59 <- 0[i] + setne.1 %r60 <- %r59, $0 phisrc.32 %phi19 <- $0 - load.32 %r58 <- 0[i] - setne.1 %r59 <- %r58, $0 - cbr %r59, .L26, .L27 + cbr %r60, .L26, .L27 .L26: - load.64 %r60 <- 0[b] - load.64 %r61 <- 8[%r60] - setne.1 %r62 <- %r61, $0 - zext.32 %r63 <- (1) %r62 - phisrc.32 %phi20 <- %r63 + load.64 %r61 <- 0[b] + load.64 %r62 <- 8[%r61] + setne.1 %r63 <- %r62, $0 + zext.32 %r64 <- (1) %r63 + phisrc.32 %phi20 <- %r64 br .L27 .L27: - phi.32 %r64 <- %phi20, %phi19 - phisrc.32 %phi21(return) <- %r64 + phi.32 %r58 <- %phi19, %phi20 + phisrc.32 %phi21(return) <- %r58 br .L25 .L25: @@ -231,23 +231,23 @@ ad: <entry-point> store.32 %arg1 -> 0[i] store.64 %arg2 -> 0[b] + load.32 %r67 <- 0[i] + setne.1 %r68 <- %r67, $0 phisrc.32 %phi22 <- $0 - load.32 %r66 <- 0[i] - setne.1 %r67 <- %r66, $0 - cbr %r67, .L30, .L31 + cbr %r68, .L30, .L31 .L30: - load.64 %r68 <- 0[b] - load.64 %r69 <- 16[%r68] - setfval.64 %r70 <- 0.000000e+00 - fcmpune.1 %r71 <- %r69, %r70 - zext.32 %r72 <- (1) %r71 - phisrc.32 %phi23 <- %r72 + load.64 %r69 <- 0[b] + load.64 %r70 <- 16[%r69] + setfval.64 %r71 <- 0.000000e+00 + fcmpune.1 %r72 <- %r70, %r71 + zext.32 %r73 <- (1) %r72 + phisrc.32 %phi23 <- %r73 br .L31 .L31: - phi.32 %r73 <- %phi23, %phi22 - phisrc.32 %phi24(return) <- %r73 + phi.32 %r66 <- %phi22, %phi23 + phisrc.32 %phi24(return) <- %r66 br .L29 .L29: diff --git a/validation/linear/phi-order01.c b/validation/linear/phi-order01.c new file mode 100644 index 00000000..0c4004fe --- /dev/null +++ b/validation/linear/phi-order01.c @@ -0,0 +1,16 @@ +int fun(void); + +static int foo(int a) +{ + return a && fun(); +} + +static int bar(int a) +{ + return a || fun(); +} + +/* + * check-name: phi-order01 + * check-command: sparse -vir -flinearize=last $file + */ diff --git a/validation/linear/phi-order02.c b/validation/linear/phi-order02.c new file mode 100644 index 00000000..d217ae45 --- /dev/null +++ b/validation/linear/phi-order02.c @@ -0,0 +1,16 @@ +int fun(void); + +static int foo(int a) { return 0 || fun(); } +static int bar(int a) { return 1 || fun(); } +static int baz(int a) { return 0 && fun(); } +static int qux(int a) { return 1 && fun(); } + +static int oof(int a) { return fun() || 1; } +static int rab(int a) { return fun() || 0; } +static int zab(int a) { return fun() && 1; } +static int xuq(int a) { return fun() && 0; } + +/* + * check-name: phi-order02 + * check-command: sparse -vir -flinearize=last $file + */ diff --git a/validation/linear/phi-order03.c b/validation/linear/phi-order03.c new file mode 100644 index 00000000..24ae10e7 --- /dev/null +++ b/validation/linear/phi-order03.c @@ -0,0 +1,8 @@ +int fun(void); + +static int foo(void) { return ((0 || fun()) && fun()); } + +/* + * check-name: phi-order03 + * check-command: sparse -vir -flinearize=last $file + */ diff --git a/validation/linear/phi-order04.c b/validation/linear/phi-order04.c new file mode 100644 index 00000000..7548537a --- /dev/null +++ b/validation/linear/phi-order04.c @@ -0,0 +1,12 @@ +static void foo(int *b) +{ + if (1) { + int c; + b = &c; + } +} + +/* + * check-name: phi-order04 + * check-command: sparse -vir -flinearize=last $file + */ diff --git a/validation/linear/unreachable-label0.c b/validation/linear/unreachable-label0.c new file mode 100644 index 00000000..695e5cb0 --- /dev/null +++ b/validation/linear/unreachable-label0.c @@ -0,0 +1,19 @@ +static int foo(int a) +{ + goto label; + switch(a) { + default: +label: + break; + } + return 0; +} + +/* + * check-name: unreachable-label0 + * check-command: test-linearize $file + * + * check-output-ignore + * check-output-contains: ret\\. + * check-output-excludes: END + */ |
