Issue 97904
Summary The program results are incorrect when Clang 17 and llc 19 are used in combination during the build process
Labels clang
Assignees
Reporter DigOrDog
    # Description
When using Clang 17 and [llc 19](https://github.com/llvm/llvm-project) together to build a program, the program is producing incorrect results!

# Enviroment
```
clang version 17.0.6
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin

LLVM (http://llvm.org/):
 LLVM version 19.0.0git
  Optimized build with assertions.
  Default target: x86_64-unknown-linux-gnu
  Host CPU: alderlake
```

# Build Step
in.ll
```
; ModuleID = 'log/seed/6547.ll'
source_filename = "M"

@G = global i8 1
@G.1 = global i32 0
@G.2 = global i1 false
@G.3 = global i32 0
@G.4 = global i64 -9223372036854775808
@G.5 = global float 0x47EFFFFFE0000000
@G.6 = global i1 true
@G.7 = global i32 65536
@G.8 = global i64 9223372036854775807
@my_format_str_int = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1
@my_format_str_float = private unnamed_addr constant [4 x i8] c"%f\0A\00", align 1
@my_format_str_long = private unnamed_addr constant [5 x i8] c"%ld\0A\00", align 1
@my_format_str_double = private unnamed_addr constant [5 x i8] c"%lf\0A\00", align 1

define float @f(i8 %0, i64 %1) {
BB:
  %LGV3 = load i64, ptr @G.8, align 4
  %LGV2 = load i32, ptr @G.7, align 4
  %LGV7 = load float, ptr @G.5, align 4
  %A = alloca i32, align 8
  store i64 1, ptr %A, align 4
  %L7 = load i8, ptr %A, align 1
  %B7 = sub i64 %1, %LGV3
  %2 = call i32 (ptr, ...) @printf(ptr @my_format_str_long, i64 %B7)
  %L6 = load float, ptr %A, align 4
  %L5 = load i32, ptr %A, align 4
  %L3 = load i32, ptr %A, align 4
  %B8 = fsub float %L6, %LGV7
  %3 = call i32 (ptr, ...) @printf(ptr @my_format_str_float, float %B8)
  %L4 = load i64, ptr %A, align 4
  %L1 = load i32, ptr %A, align 4
  store i32 1, ptr %A, align 4
  %B4 = mul i32 %L5, %LGV2
  %4 = call i32 (ptr, ...) @printf(ptr @my_format_str_int, i32 %B4)
  %B3 = udiv i32 %L1, 65536
  %5 = call i32 (ptr, ...) @printf(ptr @my_format_str_int, i32 %B3)
  %LGV1 = load i32, ptr @G.1, align 4
  %LGV = load i8, ptr @G, align 1
  %6 = urem i64 %L4, 64
  %B5 = ashr i64 -9223372036854775808, %6
  %7 = call i32 (ptr, ...) @printf(ptr @my_format_str_long, i64 %B5)
  %8 = urem i32 %L5, 32
  %B6 = ashr i32 %L3, %8
  %9 = call i32 (ptr, ...) @printf(ptr @my_format_str_int, i32 %B6)
  %C8 = icmp ule i8 %0, %L7
  %10 = zext i1 %C8 to i64
  %11 = call i32 (ptr, ...) @printf(ptr @my_format_str_long, i64 %10)
  %C = icmp ne i8 %0, %LGV
  %12 = zext i1 %C to i64
  %13 = call i32 (ptr, ...) @printf(ptr @my_format_str_long, i64 %12)
  %14 = add i8 %LGV, 7
  %B = srem i8 %0, %14
  %15 = zext i8 %B to i64
  %16 = call i32 (ptr, ...) @printf(ptr @my_format_str_long, i64 %15)
  %RP = alloca float, align 8
  store i64 1, ptr %RP, align 4
  %L = load i32, ptr %RP, align 4
 %C1 = icmp uge i8 %0, %0
  %17 = zext i1 %C1 to i64
  %18 = call i32 (ptr, ...) @printf(ptr @my_format_str_long, i64 %17)
  %19 = urem i32 %LGV1, 32
  %B2 = lshr i32 %L, %19
  %20 = call i32 (ptr, ...) @printf(ptr @my_format_str_int, i32 %B2)
  %21 = load float, ptr %RP, align 4
  %22 = call i32 (ptr, ...) @printf(ptr @my_format_str_float, float %21)
  store i32 %B2, ptr %A, align 4
  store i1 %C, ptr @G.2, align 1
  store i32 %B3, ptr @G.3, align 4
  store i64 %B5, ptr @G.4, align 4
  %CastTrunc = trunc i32 %L1 to i16
  %23 = zext i16 %CastTrunc to i64
  %24 = call i32 (ptr, ...) @printf(ptr @my_format_str_long, i64 %23)
  store float %B8, ptr %RP, align 4
  store i1 %C1, ptr @G.6, align 1
  store i64 %B7, ptr @G.4, align 4
  ret float %21
}

define i32 @main() {
entry:
  %0 = call float @f(i8 0, i64 0)
  ret i32 0
}

declare i32 @printf(ptr, ...)
```

llc-19 in.ll -o out.o -filetype=obj
clang-17 out.o -o out -no-pie -lm
./out
**Actual Result**
```
-9223372036854775807
0.000000
65536
0
-4611686018427387904
0
1
1
0
1
1
0.000000
0
```
**Expected Result**
```
-9223372036854775807
0.000000
65536
0
-4611686018427387904
0
1
1
0
1
1
0.000000
1
```

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to