in the range based
play

in the Range-Based Constraint Manager dm Balogh - PowerPoint PPT Presentation

Multiplication and Division in the Range-Based Constraint Manager dm Balogh adam.balogh@ericsson.com Euro LLVM 2019 Brussels, Belgium Ericsson 2019-04-08 Ericsson Internal | 2018-02-21 Range-Based Constraint Manager Default in


  1. Multiplication and Division in the Range-Based Constraint Manager Ádám Balogh adam.balogh@ericsson.com Euro LLVM 2019 Brussels, Belgium Ericsson 2019-04-08 Ericsson Internal | 2018-02-21

  2. Range-Based Constraint Manager — Default in Clang Static Analyzer Ericsson Internal | 2018-02-21

  3. Range-Based Constraint Manager — Default in Clang Static Analyzer — Good performance: more than 20 times faster than MS Z3 (our measurement) Ericsson Internal | 2018-02-21

  4. Range-Based Constraint Manager — Default in Clang Static Analyzer — Good performance: more than 20 times faster than MS Z3 (our measurement) — Limited deduction capabilities: only symbol plus/minus concrete integer compared to another integer Ericsson Internal | 2018-02-21

  5. Range-Based Constraint Manager — Default in Clang Static Analyzer — Good performance: more than 20 times faster than MS Z3 (our measurement) — Limited deduction capabilities: only symbol plus/minus concrete integer compared to another integer Code Ranges signed char n = get_number(); n: [-128..127] assert(i >= 100); n: [100..127] == [-128..127]&[100..127] assert(i + 20 <= -120); n: [108..116] == [100..127]&([-128..-120]-20) Ericsson Internal | 2018-02-21

  6. The Problem: False Positive — The result of multiplicative operations is unknown: true_negative.c false_positive.c int size = 4, n, i; int size = 4, n, i; for (i = 0; i < size - 2; ++i) for (i = 0; i < size / 2; ++i) init(&n); init(&n); use(n); // no warning use(n); // warning: n unitialized   Ericsson Internal | 2018-02-21

  7. The Problem: False Positive — The result of multiplicative operations is unknown: true_negative.c false_positive.c int size = 4, n, i; int size = 4, n, i; int size = 4, n, i; int size = 4, n, i; for (i = 0; i < size - 2; ++i) for (i = 0; i < size - 2; ++i) for (i = 0; i < size / 2; ++i) for (i = 0; i < size / 2; ++i) init(&n); init(&n); init(&n); init(&n); use(n); // no warning use(n); // no warning use(n); // warning: n unitialized use(n); // warning: n unitialized   Ericsson Internal | 2018-02-21

  8. The Problem: False Positive — The result of multiplicative operations is unknown: true_negative.c false_positive.c int size = 4, n, i; int size = 4, n, i; int size = 4, n, i; int size = 4, n, i; for (i = 0; i < size - 2; ++i) for (i = 0; i < size - 2; ++i) for (i = 0; i < size / 2; ++i) for (i = 0; i < size / 2; ++i) init(&n); init(&n); init(&n); init(&n); use(n); // no warning use(n); // no warning use(n); // warning: n unitialized use(n); // warning: n unitialized   — Z3 refutation may help to get rid of these false positives Ericsson Internal | 2018-02-21

  9. The Problem: False Negative — Z3 refutation, does not help to get rid of false negatives true_positive.c false_negative.c int n = get_number(); int n = get_number(); assert (n <= 2); assert (n <= 2); assert (n + 2 >= 4); assert (n * 2 >= 4); 1 / (n - 2); // div. by zero 1 / (n - 2); // no warning   Ericsson Internal | 2018-02-21

  10. The Problem: False Negative — Z3 refutation, does not help to get rid of false negatives true_positive.c false_negative.c int n = get_number(); int n = get_number(); int n = get_number(); int n = get_number(); assert (n <= 2); assert (n <= 2); assert (n <= 2); assert (n <= 2); assert (n + 2 >= 4); assert (n + 2 >= 4); assert (n * 2 >= 4); assert (n * 2 >= 4); 1 / (n - 2); // div. by zero 1 / (n - 2); // div. by zero 1 / (n - 2); // no warning 1 / (n - 2); // no warning   Ericsson Internal | 2018-02-21

  11. Patches Implementing Multiplicative Arithmetic — Much more complex than addition and subtraction (== shifting ranges circularly) Ericsson Internal | 2018-02-21

  12. Patches Implementing Multiplicative Arithmetic — Much more complex than addition and subtraction (== shifting ranges circularly) n / 20 == 5 100 119 Ericsson Internal | 2018-02-21

  13. Patches Implementing Multiplicative Arithmetic — Much more complex than addition and subtraction (== shifting ranges circularly) n / 20 == 5 100 119 n * 6 == 8 44 -84 Ericsson Internal | 2018-02-21

  14. Patches Implementing Multiplicative Arithmetic — Much more complex than addition and subtraction (== shifting ranges circularly) n / 20 == 5 100 119 n * 6 == 8 44 -84 n * 3 < 7 -84 -42 2 43 87 Ericsson Internal | 2018-02-21

  15. Patches Implementing Multiplicative Arithmetic — Much more complex than addition and subtraction (== shifting ranges circularly) n / 20 == 5 100 119 n * 6 == 8 44 -84 n * 3 < 7 -84 -42 2 43 87 — May result in huge number of ranges if multiplier is a large number (performance impact) Ericsson Internal | 2018-02-21

  16. Patches Implementing Multiplicative Arithmetic — Much more complex than addition and subtraction (== shifting ranges circularly) n / 20 == 5 100 119 n * 6 == 8 44 -84 n * 3 < 7 -84 -42 2 43 87 — May result in huge number of ranges if multiplier is a large number (performance impact) — Negative multipliers and divisors reverse the inequality operator Ericsson Internal | 2018-02-21

  17. Patches Implementing Multiplicative Arithmetic — Much more complex than addition and subtraction (== shifting ranges circularly) n / 20 == 5 100 119 n * 6 == 8 44 -84 n * 3 < 7 -84 -42 2 43 87 — May result in huge number of ranges if multiplier is a large number (performance impact) — Negative multipliers and divisors reverse the inequality operator — Patches under review: https://reviews.llvm.org/D50256 & https://reviews.llvm.org/D49074 Ericsson Internal | 2018-02-21

  18. Thank You! adam.balogh@ericsson.com

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend