39 lines · plain
1; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s2 3; Check that we convert4; zext((a * b)<nuw>)5; to6; (zext(a) * zext(b))<nuw>7 8declare i32 @get_int();9 10; Transform doesn't apply here, because %a lacks range metadata.11; CHECK-LABEL: @no_range12define void @no_range() {13 %a = call i32 @get_int()14 %b = mul i32 %a, 415 %c = zext i32 %b to i6416 ; CHECK: %c17 ; CHECK-NEXT: --> (zext i32 (4 * %a) to i64)18 ret void19}20 21; CHECK-LABEL: @range22define void @range() {23 %a = call i32 @get_int(), !range !{i32 0, i32 100}24 %b = mul i32 %a, 425 %c = zext i32 %b to i6426 ; CHECK: %c27 ; CHECK-NEXT: --> (4 * (zext i32 %a to i64))<nuw><nsw>28 ret void29}30 31; CHECK-LABEL: @no_nuw32define void @no_nuw() {33 %a = call i32 @get_int(), !range !{i32 0, i32 3}34 %b = mul i32 %a, -10035 ; CHECK: %b36 ; CHECK-NEXT: --> (-100 * %a)<nsw>37 ret void38}39