@@ -9,47 +9,32 @@ target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64"
9
9
@f = dso_local local_unnamed_addr global ptr @e , align 8
10
10
@d = dso_local local_unnamed_addr global i32 0 , align 4
11
11
12
- define void @h (i64 %x ) #0 {
13
- ; CHECK-LABEL: h:
12
+ ; FIXME: This shows a miscompile caused by merging truncated
13
+ ; stores if the store of 0 (sthrl) to 'e' happens before
14
+ ; a 64-bit store (stg) of r0.
15
+
16
+ define signext i32 @main () {
17
+ ; CHECK-LABEL: main:
14
18
; CHECK: # %bb.0:
19
+ ; CHECK-NEXT: lgrl %r0, e
15
20
; CHECK-NEXT: lgrl %r1, f
16
- ; CHECK-NEXT: srlg %r0, %r2, 32
17
- ; CHECK-NEXT: st %r0, 0(%r1)
18
- ; CHECK-NEXT: lhi %r0, 0
19
- ; CHECK-NEXT: stg %r2, 0(%r1)
20
- ; CHECK-NEXT: sthrl %r0, e
21
- ; CHECK-NEXT: strl %r2, d
21
+ ; CHECK-NEXT: srlg %r2, %r0, 32
22
+ ; CHECK-NEXT: st %r2, 0(%r1)
23
+ ; CHECK-NEXT: lhi %r2, 0
24
+ ; CHECK-NEXT: sthrl %r2, e
25
+ ; CHECK-NEXT: stg %r0, 0(%r1)
26
+ ; CHECK-NEXT: lghi %r2, 0
27
+ ; CHECK-NEXT: strl %r0, d
22
28
; CHECK-NEXT: br %r14
23
- %xsh = lshr i64 %x , 32
24
- %xhi = trunc i64 %xsh to i32
25
- %xlo = trunc i64 %x to i32
26
- %t0 = load ptr , ptr @f , align 8 , !tbaa !4
27
- store i32 %xhi , ptr %t0 , align 4 , !tbaa.struct !8
28
- %f4 = getelementptr inbounds i8 , ptr %t0 , i64 4
29
- store i32 %xlo , ptr %f4 , align 4 , !tbaa.struct !13
30
- store i16 0 , ptr @e , align 8 , !tbaa !14
31
- store i32 %xlo , ptr @d , align 4 , !tbaa !11
32
- ret void
29
+ %e = load i64 , ptr @e , align 8
30
+ %esh = lshr i64 %e , 32
31
+ %ehi = trunc i64 %esh to i32
32
+ %elo = trunc i64 %e to i32
33
+ %t1 = load ptr , ptr @f , align 8
34
+ store i32 %ehi , ptr %t1 , align 4
35
+ %f4 = getelementptr inbounds i8 , ptr %t1 , i64 4
36
+ store i32 %elo , ptr %f4 , align 4
37
+ store i16 0 , ptr @e , align 8
38
+ store i32 %elo , ptr @d , align 4
39
+ ret i32 0
33
40
}
34
-
35
- attributes #0 = { "frame-pointer" ="none" "target-cpu" ="arch13" }
36
-
37
- !llvm.module.flags = !{!0 , !1 , !2 }
38
- !llvm.ident = !{!3 }
39
-
40
- !0 = !{i32 1 , !"wchar_size" , i32 4 }
41
- !1 = !{i32 8 , !"PIC Level" , i32 2 }
42
- !2 = !{i32 7 , !"PIE Level" , i32 2 }
43
- !3 = !{!"clang version 16.0.0 (https://github.com/llvm/llvm-project.git fd16ff3a7ef7c03932066ed992a672d7e8abd304)" }
44
- !4 = !{!5 , !5 , i64 0 }
45
- !5 = !{!"any pointer" , !6 , i64 0 }
46
- !6 = !{!"omnipotent char" , !7 , i64 0 }
47
- !7 = !{!"Simple C/C++ TBAA" }
48
- !8 = !{i64 0 , i64 2 , !9 , i64 4 , i64 4 , !11 }
49
- !9 = !{!10 , !10 , i64 0 }
50
- !10 = !{!"short" , !6 , i64 0 }
51
- !11 = !{!12 , !12 , i64 0 }
52
- !12 = !{!"int" , !6 , i64 0 }
53
- !13 = !{i64 0 , i64 4 , !11 }
54
- !14 = !{!15 , !10 , i64 0 }
55
- !15 = !{!"a" , !10 , i64 0 , !12 , i64 4 }
0 commit comments