@@ -964,3 +964,69 @@ for.body: ; preds = %for.body.lr.ph, %fo
964
964
}
965
965
966
966
declare void @f (ptr )
967
+
968
+ @g = external dso_local global [100 x [100 x i8 ]]
969
+
970
+ ; This test used to crash due to calling getVRegDef on X0.
971
+ define i32 @crash () {
972
+ ; RV32I-LABEL: crash:
973
+ ; RV32I: # %bb.0: # %entry
974
+ ; RV32I-NEXT: li a0, 1
975
+ ; RV32I-NEXT: lui a1, %hi(g)
976
+ ; RV32I-NEXT: addi a1, a1, %lo(g)
977
+ ; RV32I-NEXT: add a0, a1, a0
978
+ ; RV32I-NEXT: lbu a0, 400(a0)
979
+ ; RV32I-NEXT: seqz a0, a0
980
+ ; RV32I-NEXT: sw a0, 0(zero)
981
+ ; RV32I-NEXT: li a0, 0
982
+ ; RV32I-NEXT: ret
983
+ ;
984
+ ; RV32I-MEDIUM-LABEL: crash:
985
+ ; RV32I-MEDIUM: # %bb.0: # %entry
986
+ ; RV32I-MEDIUM-NEXT: li a0, 1
987
+ ; RV32I-MEDIUM-NEXT: .Lpcrel_hi14:
988
+ ; RV32I-MEDIUM-NEXT: auipc a1, %pcrel_hi(g)
989
+ ; RV32I-MEDIUM-NEXT: addi a1, a1, %pcrel_lo(.Lpcrel_hi14)
990
+ ; RV32I-MEDIUM-NEXT: add a0, a1, a0
991
+ ; RV32I-MEDIUM-NEXT: lbu a0, 400(a0)
992
+ ; RV32I-MEDIUM-NEXT: seqz a0, a0
993
+ ; RV32I-MEDIUM-NEXT: sw a0, 0(zero)
994
+ ; RV32I-MEDIUM-NEXT: li a0, 0
995
+ ; RV32I-MEDIUM-NEXT: ret
996
+ ;
997
+ ; RV64I-LABEL: crash:
998
+ ; RV64I: # %bb.0: # %entry
999
+ ; RV64I-NEXT: li a0, 1
1000
+ ; RV64I-NEXT: lui a1, %hi(g)
1001
+ ; RV64I-NEXT: addi a1, a1, %lo(g)
1002
+ ; RV64I-NEXT: add a0, a1, a0
1003
+ ; RV64I-NEXT: lbu a0, 400(a0)
1004
+ ; RV64I-NEXT: seqz a0, a0
1005
+ ; RV64I-NEXT: sw a0, 0(zero)
1006
+ ; RV64I-NEXT: li a0, 0
1007
+ ; RV64I-NEXT: ret
1008
+ ;
1009
+ ; RV64I-MEDIUM-LABEL: crash:
1010
+ ; RV64I-MEDIUM: # %bb.0: # %entry
1011
+ ; RV64I-MEDIUM-NEXT: li a0, 1
1012
+ ; RV64I-MEDIUM-NEXT: .Lpcrel_hi14:
1013
+ ; RV64I-MEDIUM-NEXT: auipc a1, %pcrel_hi(g)
1014
+ ; RV64I-MEDIUM-NEXT: addi a1, a1, %pcrel_lo(.Lpcrel_hi14)
1015
+ ; RV64I-MEDIUM-NEXT: add a0, a1, a0
1016
+ ; RV64I-MEDIUM-NEXT: lbu a0, 400(a0)
1017
+ ; RV64I-MEDIUM-NEXT: seqz a0, a0
1018
+ ; RV64I-MEDIUM-NEXT: sw a0, 0(zero)
1019
+ ; RV64I-MEDIUM-NEXT: li a0, 0
1020
+ ; RV64I-MEDIUM-NEXT: ret
1021
+ entry:
1022
+ %idxprom7.peel = sext i32 1 to i64
1023
+ br label %for.inc.peel
1024
+
1025
+ for.inc.peel: ; preds = %entry
1026
+ %arrayidx8.3.peel = getelementptr [100 x [100 x i8 ]], ptr @g , i64 0 , i64 4 , i64 %idxprom7.peel
1027
+ %0 = load i8 , ptr %arrayidx8.3.peel , align 1
1028
+ %tobool.not.3.peel = icmp eq i8 %0 , 0
1029
+ %spec.select = select i1 %tobool.not.3.peel , i32 1 , i32 0
1030
+ store i32 %spec.select , ptr null , align 4
1031
+ ret i32 0
1032
+ }
0 commit comments